gpt4 book ai didi

mysql - create_engine 问题 mysql 5.7 和 sqlalchemy

转载 作者:行者123 更新时间:2023-11-30 22:19:40 24 4
gpt4 key购买 nike

我继承了一个使用 python 和 sqlalchemy 与 mysql 数据库交互的应用程序。当我发出:

mysql_engine = sqlalchemy.create_engine('mysql://uname:pwd@192.168.xx.xx:3306/testdb', connect_args={'use_unicode':True,'charset':'utf8', ' init_command':'SET NAMES UTF8'}, poolclass=NullPool)

, 启动时,抛出异常:

cmd = unicode("USE testdb")    
with mysql_engine.begin() as conn:
conn.execute(cmd)

sqlalchemy.exc.OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on '192.168.xx.xx' (101)") None None

但是,使用 IDLE 我可以:

>>> import MySQLdb
>>> Con = MySQLdb.Connect(host="192.168.xx.xx", port=3306, user="uname", passwd="pwd", db="testdb")
>>> Cursor = Con.cursor()
>>> sql = "USE testdb"
>>> Cursor.execute(sql)

此时的应用程序默认使用板载 sqlite 数据库。在此之后,我可以很高兴地使用上面的 create_engine 语句切换到 MySQL 数据库。然而,在重新启动时,MySQL 数据库连接将再次失败,默认为板载 sqlite 数据库等。

有没有人对这种情况如何发生有任何建议?

只是想我会更新这个 - 问题仍然完全按照上面描述的方式发生。我已经更新了应用程序,以便用户可以通过选择菜单选项手动连接到 MySQL 数据库。这会调用相同的代码,在应用程序启动时出现异常,但在应用程序启动并运行后工作正常。

MySQL 实例完全独立于应用程序并始终运行,因此它应该可以随时接收连接。

我想我正在努力解决的基本问题是相同的连接代码如何在应用程序启动并运行时工作,但在启动时抛出异常?

SQLAlchemy 是否有任何可能导致它无法创建不依赖于连接参数或远程数据库的可用连接?

最佳答案

啊哈,现在一切看起来都那么明显了......

启动时出现异常的原因是网络接口(interface)尚未完成应用程序何时向远程数据库发出第一次请求的配置。 (这就是为什么稍后尝试同样的事情会成功的原因)。

由于与远程数据库的通信是应用程序的先决条件,我现在这样做:

if grep -Fxq "mysql" /path/to/my/db/config.config
then
while ! ip a | grep inet.*wlan0 ; do sleep 1; echo "waiting for network..."; done;
fi

...在我的应用程序的启动脚本中 - 确保在应用程序运行之前网络接口(interface)已完成配置。

当然,如果接口(interface)没有配置,应用程序永远不会运行,所以它仍然需要一些技巧来允许它超时并默认使用本地数据库...

关于mysql - create_engine 问题 mysql 5.7 和 sqlalchemy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36997622/

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