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

问题描述:

假设你有下面的代码:如何判断Python SQLite数据库连接或游标是否关闭?

import sqlite3 

conn = sqlite3.connect('mydb') 
cur = conn.cursor() 
# some database actions 
cur.close() 
conn.close() 
# more code below 

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

你可以在一个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. 

这依赖于一个shortcut specific to sqlite3

+7

该方法是理智的,但避免做一个'SELECT * FROM mytable',同时你可以做一个更轻的'SELECT one_column FROM mytable LIMIT 1'。前者效率非常低,你有一个非小型数据库。 – 2009-12-30 22:07:57

+0

谢谢@pitrou,更新后考虑到这一点。 – bernie 2009-12-30 22:22:41

+3

@AntoineP。 SQLite与其他数据库混淆。 SQLite完成的工作量没有差异。它不会计算查询的所有结果 - 相反,它会尽可能少地提供第一个结果行。第二个结果行只有在你要求时才能解决。因此限制不起作用。无论如何,更好的查询不依赖于模式 - 例如PRAGMA user_version。 – 2014-06-24 18:36:54

如何确保连接和游标永不关闭?

你可以有一个基于状态的程序,你可以保证只在正确的时间调用close()。

或者将它们包装在通过执行close()的其他对象中。或者添加一个_isclosed成员close()设置并访问isclosed()