我正在尝试将 SQLAlchemy 与 MySQL 一起使用来为具有复合主键的表创建表映射,但我不确定我是否做得对。现有表是使用复合主键定义的。
这是映射类定义:
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
这匹配数据库中已有的记录 a = table1('test', 'test', 'test')
如果我将它添加到会话中并在表中添加记录,然后处理数据,我会收到 MySQL 错误(1062 Duplicate Entry)。
session.add(a)
b = session.query(table1)
for instance in b:
print(instance.col1, instance.col2)
如果我正在使用单键表,则会收到此错误:
New instance <table2 at 0x2f204d0> with identity key
(<class '__main__.table2'>,('test',)) conflicts with
persistent instance <table2 at 0x2f88770>
我是否错误地定义了复合主键?如果没有,我在进一步做错什么让我得到 MySQL 错误而不是 Python/SQLAlchemy 错误?