SQLAlchemy:FlushOrder for Inserts错误?

2024-04-16 07:06:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个表(contractscontract_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次跑步,有时更多,有时更少。然后,执行自动刷新的部分将以异常结束,告诉我无法插入合同项,因为它具有合同的外键,合同行尚不存在。在

我将数据传递到会话的add函数的顺序不是数据被刷新的顺序吗?我实际上希望SQLAlchemy能够根据依赖关系找到正确的顺序来刷新语句。需要明确的是,当合同项有一个外键到合同集时,不应将合同项行插入到合同行之前。然而,顺序似乎是随机的。在

然后,我尝试在添加合同项之前手动刷新合同

^{pr2}$

这样做没有任何问题,行被插入到数据库中。在

有没有办法设置会话中刷新语句的顺序?SQLAlchemy真的不关心依赖关系,比如外键,还是我在添加数据时出错了?如果可能的话,我宁愿不手动管理刷新。在

有没有办法让SQLAlchemy得到正确的命令?在


Tags: 数据add数据库sqlalchemy关系顺序session手动
1条回答
网友
1楼 · 发布于 2024-04-16 07:06:26

会话处理相关对象的方式由cascades定义。在关系上使用"save-update"层叠(默认情况下启用)可以自动添加相关对象,这样您只需使用一个add调用。我链接的文档包含代码示例。在

相关问题 更多 >