【发布时间】:2016-08-28 02:44:40
【问题描述】:
我继承了一个使用 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 db 等。
有没有人对如何发生这种情况有任何建议?
只是想我会更新这个 - 问题仍然像上面描述的那样发生。我已经更新了应用程序,以便用户可以通过选择菜单选项手动连接到 MySQL 数据库。这会调用相同的代码,这些代码在应用启动时会出现异常,但在应用启动并运行后就可以正常工作。
MySQL 实例完全独立于应用程序并在整个过程中运行,因此它应该可以随时接收连接。
我想我正在努力解决的基本问题是,当应用程序启动并运行时,相同的连接代码如何工作,但在启动时抛出异常?
是否有任何 SQLAlchemy 工件可能导致它无法创建不依赖于连接参数或远程数据库的可用连接?
【问题讨论】:
-
Python 死了是什么意思?例外?段错误?没有输出?
-
@univerio - 抱歉,我没有真正提供足够的信息 - 引发了异常,我添加了更多细节......
标签: mysql python-2.7 sqlalchemy