Các sự kiện before_create / after_create ở cấp bảng được phát ra (chỉ không phải là những sự kiện cấp siêu dữ liệu). bạn cần đảm bảo rằng bất kỳ điều gì xảy ra trong tập lệnh env.py của bạn cuối cùng đều liên quan đến việc thiết lập các trình xử lý sự kiện đó.
Mã bạn có ở đây có vẻ hơi đáng ngờ:
event.listen(Session.__table__, 'after_create', update_function)
event.listen(Session.__table__, 'after_create', update_trigger)
Session.__table__ đây sẽ chỉ là một Table duy nhất và đó có thể không phải là những gì bạn thấy trong tập lệnh alembic. create_table alembic lệnh tạo một Table cục bộ và chỉ chạy một tạo trên đó, vì vậy bạn cần phải lắng nghe tất cả các đối tượng Bảng trên toàn cầu:
from sqlalchemy import Table
event.listen(Table, 'after_create', update_function)
event.listen(Table, 'after_create', update_trigger)
nếu các sự kiện này chỉ dành cho một bảng cụ thể này, thì bạn sẽ không sử dụng bất kỳ sự kiện nào, bạn chỉ cần đặt DDL () cho các trình kích hoạt đó trực tiếp trong tập lệnh di chuyển của mình, ngay sau nơi nó gọi create_table() .