0

我正在从 url/JSON 中提取数据,解码 JSON 的元素并将其发送到 sqlite 表。

当我每隔一分钟提取一次 JSON 时,有时我会提取相同的 JSON(尚未刷新)。但是,我不想在表中多次输入相同的数据。这个问题的任何解决方案都是有帮助的。

我的想法是简单地将 JSON 的“执行时间”元素作为传递给 sqlite 的字段之一。因此,如果我使用 REPLACE 而不是 INSERT,当且仅当 JSON 具有新时间戳时,我才会将新行插入到现有 SQL 表中。这就是我的意思:

json = json.loads(y)
jsontime = json['executionTime']

db = sqlite3.connect('database.db')
c = db.cursor()


c.execute("""CREATE TABLE IF NOT EXISTS cbdata (
    cb_id INTEGER PRIMARY KEY ASC, 
    tjson DATE,
    id INTEGER,
    Name TEXT,
    Age INTEGER);""")

for item in json['List']:
    i1 = item["id"]
    i2 = item["Name"]
    i3 = item["Age"]
    iall = [jsontime, i1, i2, i3]
    c.execute("REPLACE into cbdata values(NULL,?,?,?,?)", iall)

但是,这并不能防止输入重复的行。每次脚本运行时,都会将新的(即使重复的)条目插入到表中。

想法?其他解决方案?非常感谢。

4

1 回答 1

1

为了使REPLACE查询正常运行,您需要指定哪些属性可以用来唯一标识行,即,您需要向UNIQUE表中添加约束。(在您的情况下,数据库无法知道四个非主键列中的哪一个对一行是唯一的。)因此,您应该在时间戳上添加唯一性约束,或者,如果您想允许超过one id, Name,Age给定时间戳的元组,添加多列唯一性约束。

于 2013-07-08T02:24:45.243 回答