sqlalchemy+mariadb:mysql服务器已经消失了

dtcbnfnu  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(367)

我知道以前有人问过这个问题,但我不能使它起作用。我正在写一个应用程序来删除网上的一些股票信息。在我将sqlalchemy对象传递到一个函数中时,刮取部分大约需要70分钟才能完成。函数完成后,应该将数据插入数据库的数据中,这就是我得到错误的时候。我想mariadb已经结束会议了?
代码:

with get_session() as session:
        stocks = session.query(Stock).filter(or_(Stock.market.like('%Large%'), Stock.market.like("%First North%"))).all()
        for stock, path in chrome.download_stock(stocks=stocks): # This function takes about 70 minutes, not using any session in here, only Stock objects
            # Starting to insert and get the error on the first insert

错误:sqlalchemy.exc.operationalerror:(\u mysql\u exceptions.operationalerror)(2006,'mysql server has gone away')
get\u session()函数:

@contextmanager
def get_session(debug=False):
    engine = create_engine('mysql://root:pw@IP/DB', echo=debug, encoding='utf8', pool_recycle=300, pool_pre_ping=True)
    Base.metadata.create_all(engine)
    Session = sessionmaker(bind=engine)
    session = Session()
    try:
        yield session
        session.commit()
    except:
        session.rollback()
        raise
    finally:
        session.close()

我尝试将pool\u recycle减少到300秒,并添加了sqlalchemny1.2附带的新pool\u pre\u ping,但没有任何效果。有什么想法吗?你认为它是在代码中还是在服务器端?
马里亚布:10.2.14
sqlalchemy:1.2.7版
编辑:开始调查mariadb wait\u超时,因为frankerz的评论有一些有趣的结果,首先来自mysql命令:

SHOW SESSION VARIABLES LIKE 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 28800 |
+---------------+-------+
1 row in set (0.00 sec)

然后通过python/sqlalchemy:

print(session.execute("SHOW SESSION VARIABLES LIKE 'wait_timeout';").first())
('wait_timeout', '600')

有什么解释吗?问题应该是对的吗?

roejwanj

roejwanj1#

至少有2个“等待\u超时”;这很令人困惑。
连接后立即执行

SET SESSION wait_timeout=12000

给你200分钟。
还要确保sqlalchemy没有超时(例如,php就是这样。)

相关问题