我正在尝试使用 python 将一小组行插入 sqlite 并收到错误“无法在封闭的数据库上操作”这是我的代码片段:import sqlite3from sqlite3 import Errordb_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 conndef 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.不确定我的连接在哪里被关闭。可能做了一些非常愚蠢的事情,但希望得到指点?
1 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
finally
函数中的子句在create_connection
返回之前关闭连接。
看起来好像您正在尝试为连接创建一种上下文管理器,但 sqlite3 Connection已经是上下文管理器了,所以这是不必要的。
你可以做
with sqlite3.connect(dbfile) as conn: print(sqlite3.version) prepare_data(conn)
退出上下文管理器时,连接将自动关闭。您可以通过将上下文管理器包装在try
/except
块中来捕获上下文管理器内部引发的错误。
添加回答
举报
0/150
提交
取消