SQLAlchemy和(2006,'MySQL服务器已经消失')

时间:2015-02-01 00:40:58

标签: python python-2.7 sqlalchemy

所以,在阅读了最后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():

但是,如果该循环的结果仅用于一个服务器,则流程通常会没有问题。

所以,恢复:

  1. 此程序从db表中检索服务器列表,并将json数据转储到db。
  2. 如果只检索一台服务器,批量插入表现良好。
  3. 如果有两个或更多服务器,则会发生以下错误:

    sqlalchemy.exc.OperationalError :( OperationalError)(2006,'MySQL服务器已经消失')

  4. Anyoen知道会发生什么事吗?我已经在mysql配置文件中增加了超时和缓冲区大小。所以我不确定问题是什么......

    更新#1 我似乎无法批量插入超过50k值的数组。我还在试图弄明白该怎么做。

0 个答案:

没有答案