我正在嘗試使用 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.不確定我的連接在哪里被關閉??赡茏隽艘恍┓浅S薮赖氖虑?,但希望得到指點?
1 回答

慕運維8079593
TA貢獻1876條經驗 獲得超5個贊
finally
函數中的子句在create_connection
返回之前關閉連接。
看起來好像您正在嘗試為連接創(chuàng)建一種上下文管理器,但 sqlite3?Connection已經是上下文管理器了,所以這是不必要的。
你可以做
with?sqlite3.connect(dbfile)?as?conn: ????print(sqlite3.version) ????prepare_data(conn)
退出上下文管理器時,連接將自動關閉。您可以通過將上下文管理器包裝在try
/except
塊中來捕獲上下文管理器內部引發(fā)的錯誤。
添加回答
舉報
0/150
提交
取消