WSGI Python 应用的锁定 SQLite 数据库错误

0 投票
1 回答
1691 浏览
提问于 2025-04-16 20:46

我在我的网页应用里遇到了一些问题,想用ajax发送多个POST请求来访问数据库,数据库是用sqlite和mod-wsgi搭建的。请求一个函数的时候没问题,但一旦调用另一个函数,就开始出现“数据库被锁定”的错误。我试过把变量设置为全局的,然后在两个函数里访问它们,也试过在每个函数里打开和关闭数据库,但都没用。

如果代码里只有一个应用函数,正确的数据库连接方式是什么呢?是用线程吗?还是用持久连接?

我之前用过Django,但这次想要一个简单的解决方案,适合在我本地机器上运行这个简单的应用。

相关的代码部分是:

con = sqlite3.connect("/var/www/Knowledge/eurisko.sqlite")
con.row_factory = sqlite3.Row
cursor = con.cursor()
cursor.execute("update notes_content set c1content=?, c2timestamp=?
where c0title=?", [content, timestamp, title])
con.commit()
cursor.close()
con.close()

完整的文件在这里:http://pastebin.com/7yuiZFi2

我在ubuntu 10上运行apache 2.2,使用libapache2-modwsgi和python 2.7。

1 个回答

0

在SQLite的文档中,有关于多个进程同时访问的警告。

http://www.sqlite.org/faq.html#q5

这些信息是在mod_wsgi的讨论组中提供的,那里也有人问过这个问题,不过我在这里补充一下。

这个问题可能会出现,因为Apache/mod_wsgi支持单进程和多进程的配置。很可能提问者使用的是多进程配置。还有:

http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

可以查看Apache/mod_wsgi的进程和线程模型的描述。

撰写回答