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

SQLite3与Python:修改日期列返回None值问题求助

关于Python+SQLite3修改整数列返回None且未生效的问题解析

嘿,我来帮你拆解这个问题——用Python操作SQLite3修改整数类型的Test列时,操作返回None且没达到预期效果,大概率是这几个常见原因:

  • 忘记提交事务(最常见)
    SQLite在Python的sqlite3模块中默认是手动提交事务的模式。你执行UPDATE语句后,如果没调用conn.commit(),所有修改都只是内存里的临时变更,不会写入数据库,看起来就像操作没生效。而且要注意:cursor.execute()方法本身就会返回None,不管语句执行成功与否,这个返回值不能用来判断修改是否生效。

    正确的操作流程应该是这样:

    import sqlite3
    
    conn = sqlite3.connect('your_db.db')
    cursor = conn.cursor()
    
    # 执行修改语句(假设Test存的是时间戳整数)
    cursor.execute("UPDATE your_table SET Test = ? WHERE id = ?", (1699999999, 1))
    
    # 关键步骤:提交事务,让修改生效
    conn.commit()
    
    # 可以通过rowcount查看受影响的行数
    print(f"受影响的行数:{cursor.rowcount}")
    
    cursor.close()
    conn.close()
    
  • SQL语句的WHERE条件没有匹配到任何行
    如果你的UPDATE语句里的WHERE条件写错了(比如ID值不对、字段名拼写错误),导致没有任何行被选中修改,这时候cursor.execute()还是会返回None,但cursor.rowcount会返回0。你可以打印这个值来验证是否真的有行被修改:

    cursor.execute("UPDATE your_table SET Test = ? WHERE id = ?", (1699999999, 999))  # 假设ID=999不存在
    print(cursor.rowcount)  # 输出0,说明没有行被修改
    
  • 对cursor.execute()返回值的误解
    很多新手会误以为execute()会返回执行结果或者成功标识,但实际上,对于UPDATE/INSERT/DELETE这类DML语句,sqlite3的cursor.execute()永远返回None。判断操作是否成功的正确方式是:

    1. 查看cursor.rowcount是否大于0(表示有行被修改)
    2. 提交事务后,重新查询目标数据,确认修改是否正确写入
  • 数据类型不匹配(可能性较低)
    虽然Test列是整数类型,但如果你传入的参数不是整数(比如字符串格式的日期),SQLite会尝试隐式转换。如果转换失败可能会报错,但如果转换后的值不是你预期的(比如把字符串"1699999999"转成整数是可行的,但"2023-10-10"会报错),这时候修改后的值不符合预期,但execute()还是返回None。这种情况可以检查传入的参数类型是否正确。

总结一下:先确认有没有提交事务,再检查WHERE条件是否正确,最后不要用execute()的返回值判断结果,用rowcount或者实际查询来验证修改效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:04:48