gpt4 book ai didi

python - SQLAlchemy + MariaDB : MySQL server has gone away

转载 作者:行者123 更新时间:2023-11-29 10:08:36 26 4
gpt4 key购买 nike

我知道这个问题之前已经被问过,但我无法让它发挥作用。我正在编写一个应用程序来废弃网络上的一些股票信息。抓取部分大约需要 70 分钟才能完成,我将 SQLAlchemy 对象传递到函数中。函数完成后,应该将数据插入到数据库的数据中,这就是我收到错误的时候。我猜 MariaDB 已经关闭了 session ?

代码:

    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: (_mysql_exceptions.OperationalError) (2006, 'MySQL 服务器已经消失')

get_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_recycle 减少到 300 秒,并添加 SQLAlchemny 1.2 附带的新 pool_pre_ping 但没有任何效果。有任何想法吗?你认为它是在代码中还是在服务器端?

MariaDB:14.2.10

SQLAlchemy:1.2.7

编辑:由于 FrankerZ 的评论,开始研究 MariaDB wait_timeout 并得到一些有趣的结果,首先来自 mysql-command:

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')

对此有何解释?应该是问题所在吧?

最佳答案

至少有2个“wait_timeouts”;这很令人困惑。

连接后立即执行

SET SESSION wait_timeout=12000

这将为您提供 200 分钟的时间。

还要确保 SQLAlchemy 没有超时。 (例如,PHP 就是如此。)

关于python - SQLAlchemy + MariaDB : MySQL server has gone away,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51417786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com