创建后的Alembic/SQLAlchemy不触发

2024-04-26 05:13:24 发布

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

我在一个项目中需要将一些自定义触发器附加到使用SQLAlchemy定义并使用Alembic控制的表。在

现在,我有一个简单的循环,它将after_create事件附加到每个声明性表类:

trigger_on = [
    Series,
    Tags,
    Genres,
    Author,
    Illustrators,
    AlternateNames,
    Translators,
    Releases,
    Language,
    Covers,
]
def iife_capture(func, param):
    def callee(table, connection, **kwargs):
        return func(connection, param)
    return callee

for classDefinition in trigger_on:
    event.listen(
        classDefinition.__table__,
        'after_create',
        iife_capture(create_trigger, classDefinition)
        )

实际上,我定义了一个立即调用的函数来捕获传递的参数,它返回一个调用表classDefinition上的create_trigger的函数。这个部分实际上工作得很好,如果我手动执行create_all(),一切都很好。在

但是,如果我通过alembic创建表,after_create调用似乎并没有被实际调用。在

另一个问题here看起来实际上是在描述一个类似的问题。我尝试将事件附加到sqlalchemy.Table,而不是单独的表,但是结果导致它们在只创建一个表之后全部执行,这失败了,因为create_trigger函数专门将内容附加到它所调用的表上。在

在创建了每个表(或者所有表都可以工作)之后,如何调用函数?在

基本上,我希望能够通过使用alembic完成我的完整的DB设置,而不是我现在拥有的可怕的凌乱的设备。在


Tags: 函数定义paramondefcreatetable事件