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()
.