我在 python 中使用 sqlalchemy 包。在对现有表执行自动加载后,我有一个操作需要一些时间才能执行。当我尝试使用连接时,这会导致以下错误:
sqlalchemy.exc.OperationalError: (OperationalError) (2006, 'MySQL server has gone away')
我有一个简单的实用函数,可以执行多次插入:
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()
由于“data_2_insert”有 677,161 行,因此执行时间很长。
final_data = [dict(zip(column_names, x)) for x in data_2_insert]
我遇到了这个问题,它指的是类似的问题。但是我不确定如何实现接受的答案建议的连接管理,因为 robots.jpg 在评论中指出了这一点:
SQLAlchemy 0.7 的注意事项 - PoolListener 已弃用,但可以使用新的事件系统实现相同的解决方案。
如果有人可以请告诉我一些关于如何将这些建议整合到我使用 sqlalchemy 的方式的指示,我将非常感激。谢谢你。