【问题标题】:INSERT or REPLACE in sqlite3 WHERE column =在 sqlite3 WHERE 列中插入或替换 =
【发布时间】:2014-04-01 05:49:30
【问题描述】:

我在 python 中使用 sqlite3。我的表存储日期时间和温度。 我想在新数据进入时更新该行,方法是更新具有相同日期时间的行,并在不存在具有特定日期时间的行时插入新行。

因此,例如,如果存在日期时间等于“2014 年 3 月 12 日”的行,我的代码应该更新它或创建新记录。但不幸的是,下面的代码总是会创建一条新记录:

c.execute("INSERT or REPLACE INTO weather (datetime, temp) VALUES ('12 Mar 2014', 20)")

任何想法表示赞赏! 附言我知道以前有人问过类似的问题,但恐怕我无法理解如何将那里的答案应用于我自己的问题(作为一个菜鸟当然没有帮助!)

【问题讨论】:

    标签: python sql datetime sqlite


    【解决方案1】:

    要使INSERT OR REPLACE 工作,您需要对表进行一些约束,例如

    datetime TEXT UNIQUE
    

    只有当插入会产生约束冲突时,才会首先删除冲突的行,然后再插入新的行。没有约束,就没有要替换的行。

    【讨论】:

    • 非常感谢!
    【解决方案2】:

    replace语句只对Primary Key或Unique Constraint有效,可以看here

    因此,将 datetime 设置为唯一键或主键(最好使用唯一键),以便您的替换语句可以正常工作。

    【讨论】:

    • 感谢您抽出宝贵时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 2015-05-11
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    相关资源
    最近更新 更多