首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >create_engine问题MySQL5.7和sqlalchemy

create_engine问题MySQL5.7和sqlalchemy
EN

Stack Overflow用户
提问于 2016-05-03 06:56:21
回答 1查看 904关注 0票数 1

我继承了一个使用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)

,在启动时,会引发异常:

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

但是,使用空闲我可以做到:

代码语言:javascript
复制
>>> 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数据库。之后,我可以很高兴地使用上面的MySQL语句切换到create_engine数据库。但是,在重新启动时,MySQL数据库连接将再次失败,默认为sqlite,等等。

有没有人对这件事的发生有什么建议?

我只是想更新一下--这个问题仍然和上面描述的一模一样。我已经更新了应用程序,以便用户可以通过选择菜单选项手动连接到MySQL db。这将调用相同的代码,在应用程序启动时出现异常,但在应用程序启动和运行后工作正常。

MySQL实例完全独立于应用程序,并且在整个过程中运行,因此它应该可以在任何时候接收连接。

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

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

EN

回答 1

Stack Overflow用户

发布于 2016-07-20 02:13:00

啊,现在看来一切都很明显了.

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

由于与远程数据库的通信是应用程序的先决条件,我现在执行如下操作:

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

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

当然,如果接口不进行配置,应用程序将永远不会运行,因此它仍然需要一些技巧才能允许它超时,并默认使用本地数据库.

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

https://stackoverflow.com/questions/36997622

复制
相关文章

相似问题

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