Python中SQLite数据库创建及updateDB函数失效问题排查
Python操作SQLite常见问题解答
一、如何创建SQLite数据库文件
使用sqlite3.connect()方法时,若指定的数据库文件不存在,SQLite会自动在当前目录生成该文件。你的代码中connect()方法已经实现了这个逻辑:当调用connect()时,若BUYHIRELtd.db不存在,系统会自动创建该数据库文件。
二、修复updateDB函数不生效的问题
你的updateDB函数存在两个核心问题:
- SQLite的写入操作(UPDATE/INSERT/DELETE)需要手动提交事务,否则修改仅停留在内存中,关闭连接时会自动回滚,不会真正写入数据库。
fetchall()不适用于UPDATE类操作,这类操作不会返回结果集,调用该方法没有实际意义。
修改后的完整代码示例:
import sqlite3 class Database: def __init__(self): self.DBName ='BUYHIRELtd.db' def connect(self): conn = None try: conn = sqlite3.connect(self.DBName) except Exception as e: print(e) return conn def queryDB(self, command, params=[]): conn = self.connect() cur = conn.cursor() cur.execute(command, params) result = cur.fetchall() self.disconnect(conn) return result def updateDB(self, command, params=[]): conn = self.connect() if not conn: return 0 cur = conn.cursor() try: cur.execute(command, params) # 提交事务,确保修改写入数据库 conn.commit() # 返回受影响的行数,用于判断操作是否生效 return cur.rowcount except Exception as e: # 出错时回滚事务,避免数据不一致 conn.rollback() print(e) return 0 finally: self.disconnect(conn) def disconnect(self, conn): conn.close()
关键修改说明:
- 添加
conn.commit()提交事务,将内存中的修改持久化到数据库文件 - 移除无用的
fetchall(),改用cur.rowcount返回受影响行数,便于验证操作结果 - 增加异常捕获与回滚逻辑,避免因错误导致的数据异常
内容的提问来源于stack exchange,提问作者GoldenCheetah14
相关产品推荐
相关产品推荐

