在SQLAlchemy

时间:2015-12-03 14:51:23

标签: python flask sqlite flask-sqlalchemy

如何让Flask-SQLAlchemy使用支持usleep()的自编译sqlite?

我正在使用Flask 0.10.1Flask-SQLAlchemy 2.1Python 3.4.0一起提供在Ubuntu 14.04中运行的微服务。作为我的应用程序的数据库后端,我使用SQLite默认设置:

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/my-database.db'

SQLite3的已安装版本为3.8.2。

在操作我的服务的过程中,我偶尔会看到以下错误:

Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
    context)
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: database is locked

微服务在很长一段时间内都没有任何数据库连接,所以一开始这个问题对我来说显得莫名其妙。我做了一些研究并发现了文章the SQLite lock timeout nightmare。它表明SQLite可以在没有usleep()支持的情况下编译,因此可能只尝试以全秒间隔锁定数据库。鉴于SQLite的默认锁定超时为5秒,我们基本上有5次尝试在失败之前尝试数据库连接。 Inspection of my SQLite compile flags还显示未设置HAVE_USLEEP。此外,SQLAlchemy不允许为SQLite设置不同的池超时,因为使用了NullPool我希望用支持usleep()的版本替换SQLite,以减少锁定超时的可能性。怎么办呢?

0 个答案:

没有答案
相关问题