Sqlite - 无法在关闭的数据库上操作
Sqlite - Cannot operate on a closed database
我正在尝试使用 python 将一小组行插入到 sqlite 中,但出现错误“无法在已关闭的数据库上操作”
这是我的代码片段:
import sqlite3
from sqlite3 import Error
db_file = "/home/sosuser/mediaserver/camera.db"
def create_connection(db_file):
conn = None
try:
conn = sqlite3.connect(db_file)
print(sqlite3.version)
except Error as e:
print(e)
finally:
if conn:
conn.close()
return conn
def create_task(conn, task):
sql = ''' INSERT INTO camerainfo(id, cameraid, maplat, maplong, name)
VALUES(?,?,?,?,?) '''
cur = conn.cursor()
cur.execute(sql, task)
def prepare_data(conn):
for cam in range(len(camID)):
print(camID[cam])
task = (cam, camID[cam], '12.972442','77.580643','testCAM')
create_task(conn, task)
conn.commit()
conn.close()
conn = create_connection(db_file)
prepare_data(conn)
得到如下错误-
Traceback (most recent call last):
File "dumpCamera1.py", line 92, in <module>
prepare_data(conn)
File "dumpCamera1.py", line 86, in prepare_data
create_task(conn, task)
File "dumpCamera1.py", line 79, in create_task
cur = conn.cursor()
sqlite3.ProgrammingError: Cannot operate on a closed database.
不确定我的连接在哪里关闭。可能做了一些非常愚蠢的事情,但希望得到指点?
谢谢。
create_connection
函数中的 finally
子句在返回之前关闭连接。
看起来您正在尝试为连接创建一种上下文管理器,但是一个 sqlite3 Connection is already a context manager,所以这是不必要的。
你可以做到
with sqlite3.connect(dbfile) as conn:
print(sqlite3.version)
prepare_data(conn)
连接将在退出上下文管理器时自动关闭。您可以通过将上下文管理器包装在 try
/ except
块中来捕获上下文管理器内部引发的错误。
我正在尝试使用 python 将一小组行插入到 sqlite 中,但出现错误“无法在已关闭的数据库上操作”
这是我的代码片段:
import sqlite3
from sqlite3 import Error
db_file = "/home/sosuser/mediaserver/camera.db"
def create_connection(db_file):
conn = None
try:
conn = sqlite3.connect(db_file)
print(sqlite3.version)
except Error as e:
print(e)
finally:
if conn:
conn.close()
return conn
def create_task(conn, task):
sql = ''' INSERT INTO camerainfo(id, cameraid, maplat, maplong, name)
VALUES(?,?,?,?,?) '''
cur = conn.cursor()
cur.execute(sql, task)
def prepare_data(conn):
for cam in range(len(camID)):
print(camID[cam])
task = (cam, camID[cam], '12.972442','77.580643','testCAM')
create_task(conn, task)
conn.commit()
conn.close()
conn = create_connection(db_file)
prepare_data(conn)
得到如下错误-
Traceback (most recent call last):
File "dumpCamera1.py", line 92, in <module>
prepare_data(conn)
File "dumpCamera1.py", line 86, in prepare_data
create_task(conn, task)
File "dumpCamera1.py", line 79, in create_task
cur = conn.cursor()
sqlite3.ProgrammingError: Cannot operate on a closed database.
不确定我的连接在哪里关闭。可能做了一些非常愚蠢的事情,但希望得到指点?
谢谢。
create_connection
函数中的 finally
子句在返回之前关闭连接。
看起来您正在尝试为连接创建一种上下文管理器,但是一个 sqlite3 Connection is already a context manager,所以这是不必要的。
你可以做到
with sqlite3.connect(dbfile) as conn:
print(sqlite3.version)
prepare_data(conn)
连接将在退出上下文管理器时自动关闭。您可以通过将上下文管理器包装在 try
/ except
块中来捕获上下文管理器内部引发的错误。