sqlite3和with语句-我需要它没有游标吗?

qaxu7uf2  于 2023-03-13  发布在  SQLite
关注(0)|答案(1)|浏览(194)

我试图理解为什么要在sqlite3中使用with(上下文管理器)。
据我所知,with将自动提交更改,但只有当光标将创建如下:

cursor = connection.cursor()

但在sqlite3中,我可以直接执行连接本身,如下所示:

connection.execute("SQL")
#then 
connection.commit()

不使用光标进行更改。
我以为上下文管理器会自动关闭连接,但它没有。所以,如果我没有在sqlite3中创建cursor,我需要使用with语句吗?
此外,如果我在最后不使用connection.close(),我也没有观察到任何差异,我可以检查某种开放连接吗?
编辑:

with slite3.connection('my_db.db") as connection:
    connection.execute("SQL")
    connection.commit()
    connection.close()

# so in example above if I am not using cursor I just can do:

connection = sqlite3.connection('my_db.db")
connection.execute("SQL")
connection.commit()
connection.close()
# Its the same?
mwg9r5ms

mwg9r5ms1#

在SQLite中使用语句确实会在代码块退出后提交所做的更改。尽管如此,这只会在使用游标对象执行SQL命令时发生。当直接使用连接对象执行SQL命令时,更改必须使用connection.commit显式提交()。建议在with语句中使用游标,以确保在执行代码块后正确关闭连接。若要检查连接是否有打开的事务,可以使用sqlite3.Connection.in_transaction属性。若要查看自连接打开以来对其进行了多少更改,可以使用sqlite3.Connection.total_changes属性。

相关问题