我从url/JSON中提取数据,解码并将JSON元素发送到sqlite表。在
当我每隔一分钟拉一次JSON时,有时我会拉同一个JSON(它还没有被刷新)。但是,我不想在表中多次输入相同的数据。任何解决这个问题的办法都是有帮助的。在
我的想法是简单地将JSON的“time executed”元素作为传递给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)
但是,这并不能阻止输入重复的行。每次脚本运行时,都会向表中插入新的(即使是重复的)条目。在
有什么想法?其他解决方案?谢谢。在
为了使
REPLACE
查询正常工作,您需要指定哪些属性可以用来唯一地标识行,也就是说,您需要向表添加UNIQUE
约束。(在您的例子中,数据库无法知道四个非主键列中的哪一个列对一行是唯一的)因此您应该在时间戳上添加一个唯一性约束,或者,如果您想为一个给定的时间戳允许多个id
、Name
、Age
元组,则添加多列唯一性约束。在相关问题 更多 >
编程相关推荐