Tom*_*Tom 6 python mysql sqlalchemy
我有一个使用sqlalchemy与MySQL数据库交互的守护进程.由于交互很少,因此连接很容易超时.我试图通过在创建数据库引擎时设置各种标志来解决问题,例如pool_recycle=3600,但似乎没有任何帮助.
为了帮助我调试问题,我将本地mysql服务器的超时设置为10秒,并尝试了以下程序.
import time
import sqlalchemy
engine = sqlalchemy.engine.create_engine("mysql://localhost")
while True:
connection = engine.connect()
result = connection.execute("SELECT 1")
print result.fetchone()
connection.close()
time.sleep(15)
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,我继续得到如下例外情况:
sqlalchemy.exc.OperationalError: (OperationalError) (2006, 'MySQL server has gone away')
Run Code Online (Sandbox Code Playgroud)
但是,如果我删除了呼叫connection.close(),问题就会消失.这里发生了什么?为什么sqlalchemy每次打电话时都没有尝试建立新的连接connect()?
我正在使用Python 2.7.3与sqlalchemy 0.9.8和MySQL 5.5.40.
我不确定这是否能解决您的问题,但我在处理 mysql 时遇到了类似的问题。当我使用 pymysql 连接数据库时才修复。
你可以这样安装:
pip install pymysql
Run Code Online (Sandbox Code Playgroud)
它适用于 Linux 和 Windows(如果你安装了它)
然后给你的连接字符串像这样:
import time
import sqlalchemy
engine = sqlalchemy.engine.create_engine("mysql+pymysql://localhost")
while True:
connection = engine.connect()
result = connection.execute("SELECT 1")
print result.fetchone()
connection.close()
time.sleep(15)
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到以下输出:
(1,)
(1,)
(1,)
(1,)
Run Code Online (Sandbox Code Playgroud)
另一方面,我发现 SQLAlchemy 0.9.8 会破坏某些查询。我必须安装 0.9.3 版本才能使我的应用程序不再损坏。
| 归档时间: |
|
| 查看次数: |
3082 次 |
| 最近记录: |