Python 如何在SqlAlchemy中创建对象时绑定事件?

Python 如何在SqlAlchemy中创建对象时绑定事件?,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我有两张表A和B。 在表a中创建新行之后,我需要在表B中创建一行(使用ForeignKeyreference) 例如: 在SA中,针对这种情况的最佳解决方案是什么 我听说过事件,但不知道如何在这种情况下以最佳方式使用它们。示例事件: def update_slug(mapper, connection, target): target.slug = slugify(target.name) if target.name_en: target.slug_en =

我有两张表
A
B
。 在表
a
中创建新行之后,我需要在表
B
中创建一行(使用
ForeignKey
reference)

例如:

在SA中,针对这种情况的最佳解决方案是什么

我听说过事件,但不知道如何在这种情况下以最佳方式使用它们。

示例事件:

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)
您只需定义一个函数。您需要将其标记为一个事件(最后两行),就您的情况而言,它将是A模型上的“after_insert”和可能的“after update”。 在函数中,您可以执行以下操作:

b = B()
b.a = target
b.save()
此处的目标是引发事件的实例


从注释中编辑以标记正确答案:根据文档,您不能在事件中进行编辑,而只能在SessionEvents.after\u flush中进行编辑。您应该查看文档:

Pawel,Thx以获取帮助!您能告诉我为什么即使我在事件侦听器中进行了提交,也会出现TransactionClosed错误吗?我可以在内部使用事务并在异常时回滚吗?我在文档中找不到我可以在事件侦听器中使用哪些类型的操作(例如,会话提交、sql表达式、orm操作、新事务等)。对不起。我的指针有点错误(短期内存;):根据文档,您不能在事件中执行此操作,而是在SessionEvents.after\u flush中执行此操作。你应该在网上查一下这些文件
b = B()
b.a = target
b.save()