sql >> Databáze >  >> RDS >> PostgreSQL

Jak získám alembic, aby vydával vlastní DDL na after_create?

Jsou vysílány události na úrovni tabulky before_create/after_create (jen ne na úrovni metadat). musíte se ujistit, že cokoli se stane ve vašem skriptu env.py, nakonec zahrnuje nastavení těchto posluchačů událostí.

Kód, který zde máte, vypadá trochu podezřele:

event.listen(Session.__table__, 'after_create', update_function)
event.listen(Session.__table__, 'after_create', update_trigger)

Session.__table__ zde by byla pouze jedna Table instance a to pravděpodobně není to, co byste viděli v alembickém skriptu. Alembic create_table vytvoří Table lokálně a pouze na něm spustíte create, takže budete muset naslouchat všem objektům tabulky globálně:

from sqlalchemy import Table
event.listen(Table, 'after_create', update_function)
event.listen(Table, 'after_create', update_trigger)

pokud jsou tyto události pouze pro tuto jednu konkrétní tabulku, pak byste nepoužili žádné události, pouze byste vložili DDL() pro tyto spouštěče přímo do vašeho migračního skriptu, hned za to, kde volá create_table() .



  1. Transactionscope vyvolání výjimky tato platforma nepodporuje distribuované transakce při otevírání objektu připojení

  2. Jak dotazovat soundex() v mysql

  3. Jak používat klauzuli hromadného sběru PL/SQL s příkazem FETCH INTO

  4. Načítání informací o datových typech pro sloupce v Oracle OCCI ResultSet