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
相关产品推荐
相关产品推荐

