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

Python操作SQLite3插入数据无报错但数据未写入问题求助

问题核心原因

SQLite3 默认开启事务模式,所有写入类操作(插入、更新、删除)执行完成后,必须手动提交事务才能将修改持久化到数据库文件中。你当前的代码执行完插入后直接关闭连接,未提交的事务会被自动回滚,因此数据不会写入库中。

修复方案

1. 最简修复:新增事务提交语句

在cursor.execute(sql)之后、connection.close()之前添加提交代码即可:

connection.commit()

2. 更安全的推荐写法:用上下文管理器管理连接

使用Python的with语句管理数据库连接,执行无异常时会自动提交事务,出现报错则会自动回滚,不需要手动调用commit和close方法,同时建议替换拼接SQL的写法为参数化查询,避免SQL注入风险:

import sqlite3

db_path = 'databases/verification.db'

verification_id = '1234567890'
email_adress = 'mymail@gmail.com'
password = 'superduperpassword'
username = 'admin'

with sqlite3.connect(db_path) as conn:
    cursor = conn.cursor()
    # 使用?作为参数占位符,不要用f字符串拼接SQL
    sql = '''INSERT OR FAIL INTO verification (
                verification_id, 
                email_adress,
                password, 
                username) 
            VALUES (?, ?, ?, ?)
         '''
    cursor.execute(sql, (verification_id, email_adress, password, username))
其他注意事项
  • 你当前的插入代码用f字符串拼接SQL语句,如果输入内容包含特殊字符(比如单引号)会直接执行失败,同时存在SQL注入风险,建议统一使用上面示例的参数化查询写法
  • 建表和插入代码的数据库路径一个用了正斜杠/一个用了反斜杠\\,虽然Windows环境下可兼容,但建议统一用正斜杠或者pathlib库处理路径,避免跨平台运行异常
  • 你代码SQL语句中的"是HTML转义字符,实际Python代码中直接用单引号或双引号包裹值即可,不需要转义

内容的提问来源于stack exchange,提问作者mondkeks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:06:06