sqlalchemy.event.listen 未找到事件“after_create”

Nik*_*nko 5 events sqlalchemy python-3.x

我有一个表 Test 并希望为“进度”列添加约束

class Test(Base):
__tablename__ = 'test'

id = Column('id', INTEGER, primary_key=True)
name = Column('name', VARCHAR(30))
progress = Column('progress', VARCHAR(4), server_default='0')


event.listen(
Test,
"after_create",
DDL("ALTER TABLE test ADD CONSTRAINT "
    "cst_test_progress "
    " CHECK (progress like '[0-9]')")
)
Run Code Online (Sandbox Code Playgroud)

此代码返回错误:

sqlalchemy.exc.InvalidRequestError: No such event 'after_create' for target '<class '__main__.Test'>'
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

Sup*_*oot 8

after_create是一个core事件,而不是一个ORM事件,所以它不接受 ORM 类作为它的target参数。来自文档:

\n\n
\n

target \xe2\x80\x93 作为事件目标的元数据或表对象。

\n
\n\n

它需要 ORM 模型代表的表,而不是模型。一个示例解决方案可能是:

\n\n
from sqlalchemy import event\n\n@event.listens_for(Test.__table__, \'after_create\')\ndef receive_after_create(target, connection, **kw):\n    connection.execute(\n        "ALTER TABLE test ADD CONSTRAINT "\n        "cst_test_progress "\n        " CHECK (progress like \'[0-9]\')"\n    )\n
Run Code Online (Sandbox Code Playgroud)\n