【问题标题】:SQLite database gets locked by SELECT clauseSQLite 数据库被 SELECT 子句锁定
【发布时间】:2016-11-21 05:43:48
【问题描述】:

我有一个 python 脚本,它创建一个数据库,然后进入一个无限循环,该循环每秒运行一次,通过一些选择查询数据库。

同时我使用 sqlite cli 连接到数据库并尝试进行更新,但我得到一个数据库被锁定的错误。

这里是脚本的(匿名)代码:

import sqlite3
import time

con = sqlite3.connect(r'path\to\database.sqlite')

con.execute('DROP TABLE IF EXISTS blah;')
con.execute('CREATE TABLE blah;')
con.execute('INSERT INTO blah;')

con.commit()

while True:
    result = con.execute('SELECT blah')
    print(result.fetchone()[0])
    time.sleep(1)

【问题讨论】:

  • 你可能想在fetchoneresult.close()之后关闭光标
  • @JoachimIsaksson 恐怕没用
  • 那么 CL. 下面的回答可能有帮助,不知道内置的事务管理。

标签: python sqlite


【解决方案1】:

Python 的 sqlite3 模块尝试变得聪明,manages transactions for you

为确保您可以从其他线程/进程访问数据库,请禁用它(将isolation_level 设置为None),并在需要时使用显式事务。 或者,完成后致电con.commit()

【讨论】:

  • 我在问这里之前尝试了isolation_level“技巧”,但没有奏效,很抱歉我没有提到它。此外,正如您在创建数据库后提交的代码中看到的那样,在循环中我只使用不需要提交的 SELECT 子句。
猜你喜欢
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 2015-05-11
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多