You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:05:48