相关疑难解决方法(0)

python:sqlalchemy - 如何使用新的事件系统确保连接不会过时

我在python中使用sqlalchemy包.在现有表上执行自动加载后,我的操作需要一些时间才能执行.当我尝试使用连接时,这会导致以下错误:

sqlalchemy.exc.OperationalError: (OperationalError) (2006, 'MySQL server has gone away')
Run Code Online (Sandbox Code Playgroud)

我有一个简单的实用程序函数执行多次插入:

def insert_data(data_2_insert, table_name):
    engine = create_engine('mysql://blah:blah123@localhost/dbname')
    # Metadata is a Table catalog. 
    metadata = MetaData()
    table = Table(table_name, metadata, autoload=True, autoload_with=engine)
    for c in mytable.c:
        print c
    column_names = tuple(c.name for c in mytable.c)
    final_data = [dict(zip(column_names, x)) for x in data_2_insert]
    ins = mytable.insert()
    conn = engine.connect()
    conn.execute(ins, final_data)
    conn.close()
Run Code Online (Sandbox Code Playgroud)

由于'data_2_insert'有677,161行,所以执行时间很长的是以下行.

final_data = [dict(zip(column_names, x)) for x in data_2_insert]
Run Code Online (Sandbox Code Playgroud)

我遇到了这个问题,提到了类似的问题.但是我不确定如何实现接受的答案建议的连接管理,因为robots.jpg在评论中指出了这一点:

SQLAlchemy 0.7的注意事项 - 不推荐使用PoolListener,但可以使用新的事件系统 …

mysql database-connection sqlalchemy operationalerror

3
推荐指数
1
解决办法
5730
查看次数