【问题标题】:How to tell if Python SQLite database connection or cursor is closed?如何判断 Python SQLite 数据库连接或游标是否关闭?
【发布时间】:2010-12-31 04:25:07
【问题描述】:

假设您有以下代码:

import sqlite3

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

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

【问题讨论】:

    标签: python sqlite database-connection


    【解决方案1】:

    你可以用try, except 声明:

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

    这依赖于shortcut specific to sqlite3

    【讨论】:

    • 该方法很合理,但避免使用SELECT * FROM mytable,而您可以使用更轻松的SELECT one_column FROM mytable LIMIT 1。前者效率极低,因为您有一个非小型数据库。
    • @AntoineP。您将 SQLite 与其他数据库混淆了。 SQLite 完成的工作量没有区别。它不会预先计算查询的所有结果 - 相反,它会做尽可能少的工作来给出第一个结果行。第二个结果行仅在您要求时才计算出来。因此,限制无效。无论如何,更好的查询是不依赖于模式的查询 - 例如 PRAGMA user_version。
    • 感谢@RogerBinns 添加该内容
    【解决方案2】:

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

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

    或者将它们包装在具有close() 传递实现的其他对象中。或添加由close() 设置并由isclosed() 访问的_isclosed 成员。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 2020-01-04
      • 2011-04-22
      • 2012-10-07
      • 1970-01-01
      • 2017-06-17
      相关资源
      最近更新 更多