所以,在阅读了最后1小时的每一页后,我仍然无法找到解决此问题的方法。
这是我的 connection.py 文件:
from sqlalchemy import create_engine, Table, Column, String, Integer, MetaData
from sqlalchemy.sql import select
class DatabaseConnectionManager:
def __init__(self):
self.host = 'localhost:3306'
self.db = 'xxx'
self.user = 'xxx'
self.pwd = 'xxx'
self.connect_string = 'mysql://{u}:{p}@{s}/{d}'.format(u=self.user,
p=self.pwd,
s=self.host,
d=self.db)
self.metadata = MetaData()
self.engine = create_engine(self.connect_string, echo=False,
pool_size=100, pool_recycle=3600)
self.conn = self.engine.connect()
def insert_table(self, inputs):
self.conn.execute(self.tbl_auctions().insert(), inputs)
# Update 1 : conn.close() removed.
#self.conn.close()
def select_servers(self):
try:
s = select([self.tbl_servers()])
result = self.conn.execute(s)
except:
raise
else:
return result
这是我的 bulk_inserter.py 文件:
import sys
import time
import json
from connector import DatabaseConnectionManager
def build_auctions_list():
server_list = []
db = DatabaseConnectionManager()
# Loop over regions
for server, env in db.select_servers_table():
request_auction_data = json.loads(dump_auction_url(region, realm))
for auction in request_auction_data:
auction_list.append(auction)
db.insert_table(server_list)
if __name__ == '__main__':
start = time.time()
build_auctions_list()
print time.time() - start
因此,当我尝试使用 db.insert_table(server_list)为循环为服务器,env在db中返回的2个或更多服务器插入所有批量数据时,会出现问题。 select_servers_table():
但是,如果该循环的结果仅用于一个服务器,则流程通常会没有问题。
所以,恢复:
如果有两个或更多服务器,则会发生以下错误:
sqlalchemy.exc.OperationalError :( OperationalError)(2006,'MySQL服务器已经消失')
Anyoen知道会发生什么事吗?我已经在mysql配置文件中增加了超时和缓冲区大小。所以我不确定问题是什么......
更新#1 我似乎无法批量插入超过50k值的数组。我还在试图弄明白该怎么做。