如何判断Python SQLite数据库连接或游标是否已关闭?

dav*_*lab 11 python sqlite database-connection

假设您有以下代码:

import sqlite3

conn = sqlite3.connect('mydb')
cur = conn.cursor()
# some database actions
cur.close()
conn.close()
# more code below
Run Code Online (Sandbox Code Playgroud)

如果我稍后尝试使用conncur对象,我怎么能告诉它们已关闭?我找不到.isclosed()方法或类似的东西.

ber*_*nie 10

你可以在try, except声明中包装:

>>> conn = sqlite3.connect('mydb')
>>> conn.close()
>>> try:
...   resultset = conn.execute("SELECT 1 FROM my_table LIMIT 1;")
... except sqlite3.ProgrammingError as e:
...   print e
Cannot operate on a closed database.
Run Code Online (Sandbox Code Playgroud)

这依赖于特定于sqlite3快捷方式.

  • 该方法是理智的,但避免做一个`SELECT*FROM mytable`,而你可以做一个更轻的`SELECT one_column FROM mytable LIMIT 1`.前者是非常低效的,你有一个非小型数据库. (7认同)
  • @AntoineP.您将SQLite与其他数据库混淆.SQLite完成的工作量没有差异.它不会预先计算查询的所有结果 - 相反,它可以为第一个结果行提供最少量的工作.第二个结果行只有在您要求时才会计算出来.因此限制没有效果.无论如何,更好的查询是不依赖于模式的查询 - 例如PRAGMA user_version. (3认同)