Sum*_*man 5 python mysql sqlalchemy
我正在为一个项目使用 SQLAlchemy,并且出于性能原因需要能够为一个特定调用指定会话变量/设置:
set session max_heap_table_size = 1024 * 1024 * 64;
Run Code Online (Sandbox Code Playgroud)
我当然可以直接在 MySQL 中(在 shell 上)执行此操作,但是如何在 SQLAlchemy 会话中设置此会话变量?
使用会话事件对每个新事务执行任意 SQL 语句。您还可以在连接级别使用事件,这取决于您的用例。
以下是我在会话级别上执行此操作的方法:
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')
Run Code Online (Sandbox Code Playgroud)
如果您不确定哪种方法适合您,请尝试一下,编写一些测试用例,看看它是否适合您。
可能有一个警告(不确定):由于连接没有被删除而是返回到池中,因此该设置可能会持续存在。在这种情况下,您可能还想附加一些内容来恢复默认值,例如在after_flush
事件上。我对此不太确定,你可能想尝试一下。如果这是不必要的,您也可以使用该after_begin
事件,但没有真正的before_close
事件来包装它,因此它可能会产生问题。