访问具有多个连接的sqlite数据库

时间:2014-03-25 13:51:05

标签: python sqlite

我想从多个实例访问相同的SQLite数据库。

我尝试了两个Python shell,但是在另一个连接上显示新条目时没有得到真正一致的结果。这实际上是否有效或仅仅是侥幸(或者是我的误解)?

我使用的是以下代码段:

>>> import sqlite3
>>> conn = sqlite3.connect("test.db")
>>> conn.cursor().execute("SELECT * from foo").fetchall()
>>> conn.execute("INSERT INTO foo VALUES (1, 2)")

当然,我并不总是添加新条目。

2 个答案:

答案 0 :(得分:8)

这不是一个侥幸,只是对如何处理连接的误解。来自docs

  

当多个连接访问数据库时,其中一个连接   进程修改数据库,SQLite数据库被锁定,直到   该事务已提交。 timeout参数指定方式   连接应该等待锁定消失直到提升   一个例外。 timeout参数的默认值为5.0(五   秒)。

要查看其他连接的更改,您必须commit()execute()命令进行更改。再次,来自文档:

  

如果您不调用此方法,则自上次调用以来您执行的任何操作   从其他数据库连接中看不到commit()。如果你想知道   为什么你没有看到你写入数据库的数据   检查你没有忘记称这种方法。

答案 1 :(得分:2)

您还应该在任何DML语句之后包含提交。如果连接字符串的autocommit属性设置为false

>>> import sqlite3
>>> conn = sqlite3.connect("test.db")
>>> conn.cursor().execute("SELECT * from foo").fetchall()
>>> conn.execute("INSERT INTO foo VALUES (1, 2)")
>>> conn.commit()