我有2个表(contracts和contract_items),其中表的foreign key设置为第一个。
[当使用SQLAlchemy将列表中的新数据插入到我的postgre数据库中时,我基本上是在做以下事情:
for row in list:
# Get contract and item from row
...
session.add(contract)
session.add(contract_item)
# Do some select statements (which will raise an auto-flush)
...
session.commit()
现在...这可能运行2-3次,有时更多,有时更少。然后,执行自动刷新的部分将以异常结尾,告诉我contract_item无法插入,因为它具有contract的外键并且contract行不存在还没有。
将数据传递给会话的add-function的顺序不是刷新数据的顺序吗?我实际上希望SQLAlchemy根据依赖关系自行找到刷新语句的正确顺序。应当清楚的是,当contract_item设置了contract的外键时,不应在contract_item行之前插入contract_item行。但是顺序似乎是随机的。
然后我尝试在添加contract_item之前手动刷新contract:
for row in list:
# Getting contract and item from row
...
session.add(contract)
session.flush() # Flushing manually
session.add(contract_item)
# Do some select statements (which will raise an auto-flush)
...
session.commit()
此方法没有任何问题,并且行已插入数据库。
是否有任何方法可以设置会话刷新语句的顺序? SQLAlchemy真的不关心诸如外键之类的依赖性吗,还是在添加数据时出错?如果可能,我宁愿不手动管理冲洗。
有没有一种方法可以使SQLAlchemy正确获得订单?