相关疑难解决方法(0)

如果我不在Python SQLite中关闭数据库连接怎么办?

我正在做这样的事......

conn = sqlite3.connect(db_filename)

with conn:
    cur = conn.cursor()
    cur.execute( ... )
Run Code Online (Sandbox Code Playgroud)

with自动提交更改.但是文档没有提到关闭连接.

实际上我可以conn在以后的陈述中使用(我已经测试过).因此,似乎上下文管理器没有关闭连接.

我是否必须手动关闭连接.如果我把它打开怎么办?

编辑

我的结论......

  • 连接不会关闭上下文管理,我已经测试并确认它.在__exit__,上下文管理器ONLY通过执行来提交更改conn.commit()
  • with conn并且with sqlite3.connect(db_filename) as conn同一件事.所以使用其中任何一个仍将使连接保持活跃
  • with 语句不会创建新范围,因此在with的套件内创建的所有变量都可以在其外部访问
  • 最后,您应该手动关闭连接

python sqlite database-connection

56
推荐指数
4
解决办法
3万
查看次数

OperationalError:数据库已锁定

我在我的应用程序中进行了一些重复操作(测试它),突然间我得到一个奇怪的错误:

OperationalError: database is locked
Run Code Online (Sandbox Code Playgroud)

我重新启动了服务器,但错误仍然存​​在.一切都是关于什么的?

python database sqlite django locked

48
推荐指数
8
解决办法
7万
查看次数

是否有“with conn.cursor() as...”的方式来使用 Sqlite?

而不是使用:

import sqlite3
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute(...)
c.close()
Run Code Online (Sandbox Code Playgroud)

是否可以使用 Pythonic 成语:

with conn.cursor() as c:
    c.execute(...)
Run Code Online (Sandbox Code Playgroud)

它似乎不起作用:

AttributeError: __exit__
Run Code Online (Sandbox Code Playgroud)

注:关闭,因为游标是很重要的这个

python database sqlite with-statement

6
推荐指数
2
解决办法
2737
查看次数