Sử dụng sự kiện phiên để thực hiện một câu lệnh SQL tùy ý trên mỗi giao dịch mới. Bạn cũng có thể sử dụng các sự kiện ở cấp độ kết nối, nó phụ thuộc vào trường hợp sử dụng của bạn.
Đây là cách tôi sẽ làm điều đó ở cấp phiên:
Session = sessionmaker()
@event.listens_for(Session, 'before_flush')
def set_max_heap_table_size(session, transaction, connection):
session.execute('SET max_heap_table_size = 1024 * 1024 * 64')
Nếu bạn không chắc cách nào phù hợp với mình, chỉ cần thử chúng, viết một số trường hợp thử nghiệm và tìm hiểu xem cách đó có phù hợp với bạn không.
Có thể có một cảnh báo (không chắc chắn):Vì kết nối không bị ngắt nhưng được quay trở lại nhóm, cài đặt có thể vẫn tồn tại. Trong trường hợp này, bạn cũng có thể muốn đính kèm thứ gì đó để khôi phục mặc định, ví dụ:trên after_flush
biến cố. Tôi không hoàn toàn chắc chắn về điều này, bạn có thể muốn thử nghiệm. Nếu điều này là không cần thiết, bạn cũng có thể sử dụng after_begin
sự kiện, nhưng không có before_close
thực sự kiện bao bọc nó, vì vậy nó có thể tạo ra sự cố.