通过python将JSON转换为sqlite:替换为不识别相同的行

2024-06-28 11:33:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我从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)

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

有什么想法?其他解决方案?谢谢。在


Tags: 数据nameidjson元素executedbsqlite
1条回答
网友
1楼 · 发布于 2024-06-28 11:33:27

为了使REPLACE查询正常工作,您需要指定哪些属性可以用来唯一地标识行,也就是说,您需要向表添加UNIQUE约束。(在您的例子中,数据库无法知道四个非主键列中的哪一个列对一行是唯一的)因此您应该在时间戳上添加一个唯一性约束,或者,如果您想为一个给定的时间戳允许多个idNameAge元组,则添加多列唯一性约束。在

相关问题 更多 >