SQLAlchemy:插入的刷新顺序错误?
SQLAlchemy: Flush-Order for Inserts wrong?
我有 2 个表(contracts 和 contract_items),其中后者有一个 外键设置为第一个。
当使用 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 行尚不存在。
我将数据传递给会话的附加函数的顺序不是刷新数据的顺序吗?我实际上希望 SQLAlchemy 能够找到正确的顺序来根据依赖关系自行刷新语句。应该清楚的是,contract_item行不应该插入到contract行之前,当contract_item 有一个 contract 集的外键。然而顺序似乎是随机的。
然后我尝试在添加 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 得到正确的顺序?
我有 2 个表(contracts 和 contract_items),其中后者有一个 外键设置为第一个。
当使用 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 行尚不存在。
我将数据传递给会话的附加函数的顺序不是刷新数据的顺序吗?我实际上希望 SQLAlchemy 能够找到正确的顺序来根据依赖关系自行刷新语句。应该清楚的是,contract_item行不应该插入到contract行之前,当contract_item 有一个 contract 集的外键。然而顺序似乎是随机的。
然后我尝试在添加 contract_item:
之前手动刷新 contractfor 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 得到正确的顺序?