sqlalchemy.event.listen not found событие "after_create" - PullRequest
0 голосов
/ 19 марта 2019

У меня есть таблица Test и я хочу добавить ограничение для столбца 'progress'

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]')")
)

этот код возвращает ошибку:

sqlalchemy.exc.InvalidRequestError: No such event 'after_create' for target '<class '__main__.Test'>'

Как мне это решить?

1 Ответ

0 голосов
/ 21 марта 2019

after_create - это событие core, а не ORM, поэтому он не принимает класс ORM в качестве аргумента target.Из документов:

target - объект MetaData или Table, являющийся целью события.

Требуется таблица, в которой ваш ORMМодель представляет собой, а не модель.Примером решения может быть:

from sqlalchemy import event

@event.listens_for(Test.__table__, 'after_create')
def receive_after_create(target, connection, **kw):
    connection.execute(
        "ALTER TABLE test ADD CONSTRAINT "
        "cst_test_progress "
        " CHECK (progress like '[0-9]')"
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...