SQLAlchemy更新对象树



我正在尝试构建一个对象树。类看起来是这样的:

class Node(BaseModel, db.Model):
'''Node model'''
__tablename__ = 'network_nodes'
id = Column(String(10), primary_key=True)
parent_id = Column(String(10), ForeignKey('network_nodes.id'))
parent = relationship("Node", foreign_keys=[parent_id], lazy='dynamic')
left_id = Column(String(10), ForeignKey('network_nodes.id'))
left = relationship("Node", foreign_keys=[parent_id], lazy='dynamic')
right_id = Column(String(10), ForeignKey('network_nodes.id'))
right = relationship("Node", foreign_keys=[parent_id], lazy='dynamic')

每当添加新的叶子时,就会执行以下代码:

node.left_id = element_id
left = Node(id=element_id, parent_id=node.id)
db.session.add(left)

在某个时刻,我使用db.session.commit()提交所有更改。在commit()点,我在会话中看到脏的和新的对象。但是提交失败并出现错误:

(MySQLdb.exceptions.IntegrityError)(1452,'无法添加或更新子行:外键约束失败(db.network_nodes,constraintnetwork_nodes_ibfk_2foreign key(left_id)REFERENCESnetwork_nodes(id))')[SQL:更新网络节点SET left_id=%s,right_id=%d WHERE network_nodes.id=%s][参数:('S5837124','S5839010','S5832131')]

我假设脏对象在新对象之前提交。因此left_id是指尚未存在的记录。

如何在脏对象之前提交新对象?

如何在脏对象之前提交新对象?

您可以添加所有对象,刷新新对象,然后提交整个批:

left = Node(id=element_id, parent_id=node.id)
session.add(left)
node.left_id = element_id

session.flush(session.new)
session.commit()

相关内容

  • 没有找到相关文章

最新更新