我有两张表A
和B
。
在表B
中创建新行后,我需要在表ForeignKey
中创建一行(带A
引用)。
例如:
class A(db.Model):
__tablename__ = 'a'
id = Column(BigInteger, primary_key=True)
...
class B(db.Model):
__tablename__ = 'b'
id = Column(BigInteger, primary_key=True)
a_id = Column(BigInteger, ForeignKey('a.id'), nullable=False, index=True)
...
SA中此案例的最佳解决方案是什么?
我听说过事件,但在这种情况下无法理解如何使用它们。
答案 0 :(得分:1)
示例事件:
def update_slug(mapper, connection, target):
target.slug = slugify(target.name)
if target.name_en:
target.slug_en = slugify(target.name_en)
event.listen(Post, 'before_insert', update_slug_with_date)
event.listen(Post, 'before_update', update_slug_with_date)
您只需定义一个功能。你需要将它标记为一个事件(最后两行),在你的情况下它将是'after_insert'并且可能在A模型上'更新'之后。 在函数中,您可以执行以下操作:
b = B()
b.a = target
b.save()
target这里是引发事件的实例。
从评论中编辑标记正确的答案:根据文档,您无法在事件中但在SessionEvents.after_flush中执行此操作。您应该查看文档:{{3}}