Tôi đang cố gắng sử dụng SQLAlchemy với MySQL để tạo một ánh xạ bảng cho một bảng có khóa chính hỗn hợp và tôi không chắc liệu tôi có làm đúng không. Bảng hiện tại được xác định bằng khóa chính kết hợp.Cách xác định khóa chính kết hợp trong SQLAlchemy
Đây là định nghĩa lớp bản đồ:
class table1(Base):
__tablename__ = 'table1'
col1 = Column(String, primary_key=True)
col2 = Column(String, primary_key=True)
col3 = Column(String)
def __init__ = (self, col1, col2, col3):
self.col1 = col1
self.col2 = col2
self.col3 = col3
này phù hợp với một kỷ lục đã có trong cơ sở dữ liệu a = table1 ('test', 'test', 'test')
Nếu tôi thêm này đến phiên và thêm các bản ghi trong bảng, sau đó làm việc với dữ liệu, tôi nhận được một lỗi MySQL (1062 Duplicate Entry).
session.add(a)
b = session.query(table1)
for instance in b:
print(instance.col1, instance.col2)
Nếu tôi đang làm việc với một bảng duy nhất-key, tôi nhận được lỗi này thay vì:
New instance <table2 at 0x2f204d0> with identity key
(<class '__main__.table2'>,('test',)) conflicts with
persistent instance <table2 at 0x2f88770>
Tôi định khóa chính tổng hợp không đúng cách? Nếu không, tôi đang làm gì sai hơn nữa cho tôi để có được lỗi MySQL thay vì một lỗi Python/SQLAlchemy?
Tôi không thực sự chắc chắn, tôi có được những gì bạn đang làm. Nếu giá trị đã tồn tại, bạn cần truy vấn giá trị đó, không phải tạo giá trị mới: 'a = session.query (table1) .filter (table1.col1 == 'test') .bộ lọc (table1.col2 == 'test ') .one() '. Nếu điều này là * không * rõ ràng với bạn thì tôi khuyên bạn nên thực hiện các hướng dẫn được cung cấp trong tài liệu. Nếu tôi sai về câu hỏi của bạn, xin hãy giải thích. – javex
bạn đang sử dụng phiên bản sqlalchemy nào? –
Không có đủ thông tin về những gì đang diễn ra. [Làm thế nào để tạo ra một ví dụ tối thiểu, đầy đủ, và có thể xác minh được] (http://stackoverflow.com/help/mcve) Dường như với cả khóa hỗn hợp và không phải là tổng hợp, bạn đang cố thêm một hàng có giá trị subrow key đã có trong một bảng, nhưng khai báo quan trọng nói rằng một giá trị khóa con đã cho chỉ có thể xuất hiện một lần trong một bảng, do đó các thông báo lỗi. Khi tôi viết, câu hỏi này có một tiền thưởng từ TerrenceBrannon, người có thể tốt hơn khi đăng một câu hỏi mới để họ có thể cung cấp đầy đủ chi tiết từ tình huống của chính họ. – philipxy