首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQLAlchemy + MariaDB: MySQL服务器已不复存在

SQLAlchemy + MariaDB: MySQL服务器已不复存在
EN

Stack Overflow用户
提问于 2018-07-19 16:24:15
回答 1查看 3.2K关注 0票数 0

我知道以前有人问过这个问题,但我不能让它起作用。我正在写一个应用程序来删除网络上的一些股票信息。抓取部分大约需要70分钟才能完成,我将SQLAlchemy对象传递到一个函数中。在函数完成后,它应该将数据插入到数据库的数据中,这是我得到错误的时候。我猜MariaDB已经关闭了会话?

代码:

代码语言:javascript
复制
    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()函数:

代码语言:javascript
复制
@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: 10.2.14

SQLAlchemy: 1.2.7

编辑:由于FrankerZ的评论,我开始调查MariaDB命令,并得出了一些有趣的结果,首先来自mysql- wait_timeout:

代码语言:javascript
复制
SHOW SESSION VARIABLES LIKE 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 28800 |
+---------------+-------+
1 row in set (0.00 sec)

然后通过Python / SQLAlchemy:

代码语言:javascript
复制
print(session.execute("SHOW SESSION VARIABLES LIKE 'wait_timeout';").first())
('wait_timeout', '600')

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

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51417786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档