Python 创建后的Alembic/SQLAlchemy未触发
我正在进行一个项目,需要将一些自定义触发器附加到使用SQLAlchemy定义并使用Alembic控制的表 现在,我有一个简单的循环,它将一个Python 创建后的Alembic/SQLAlchemy未触发,python,sqlalchemy,alembic,Python,Sqlalchemy,Alembic,我正在进行一个项目,需要将一些自定义触发器附加到使用SQLAlchemy定义并使用Alembic控制的表 现在,我有一个简单的循环,它将一个after\u create事件附加到每个声明性表类: trigger_on = [ Series, Tags, Genres, Author, Illustrators, AlternateNames, Translators, Releases, Language, Cove
after\u 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\u trigger
的函数。这部分实际上工作正常,如果我手动执行create\u all()
,一切都正常
但是,如果我通过alembic创建表,那么在创建之后的调用似乎实际上没有被调用
另一个SE问题看起来实际上描述了一个类似的问题。我尝试将事件附加到sqlalchemy.Table
,而不是单独的表,但它最终导致在只创建一个表之后执行所有事件,这失败了,因为create\u trigger
函数专门将事件附加到它所调用的表
在创建每个表(或者所有表都可以工作)之后,如何调用函数
基本上,我想通过使用alembic来完成我的完整DB设置,而不是我现在拥有的糟糕的设备。@Flake你解决了这个问题吗?@JasonRussell-没有!您好@Flake,我不确定您使用触发器的目的是什么,但我正在计划使用它们来填充各种模型的历史记录表。我找到了一个很好的解决方案,我只是觉得你可能会对它感兴趣@JasonRussell-很有趣。我来看看。顺便说一句,谁是“@Flake”?@Flake是Fake的误读名称,谁的名字在任何情况下都是假的。