gpt4 book ai didi

python - 如何使用Python防止SQLite3中的多个条目(重复)

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:10 25 4
gpt4 key购买 nike

我正在使用 python 脚本将数据插入到 sqlite3 中。但我的问题是脚本插入了三个重复(相同)的数据。只需插入相同的数据三次即可。

print flag        
if flag == 1:
print colored('Authorized', 'green')
pi1.write(6, 0)
conn1 = sqlite3.connect('db/local.db')
c = conn1.cursor()
i = datetime.datetime.now()
date = i.strftime("%Y-%m-%d %H:%M:%S")
c.execute("INSERT INTO lock_logs (msg,created_at,card,date,host_ip,door_name,state) VALUES ('Authorized card','"+date+"', "+reader_value+", '"+date+"', '"+get_ip_address('eth0')+"', 'NL_1','opened')")
conn1.commit()
conn1.close()
time.sleep(3)
pi1.write(6, 1)
print "inserted"
#cron will send log to server
else:
print colored('Not Authorized', 'red')
pi1.write(6, 1)
#store log to local sqllight file
#conn = sqlite3.connect('db/local.db')
conn2 = sqlite3.connect('db/local.db')
c = conn2.cursor()
i = datetime.datetime.now()
date = i.strftime("%Y-%m-%d %H:%M:%S")
c.execute("INSERT INTO lock_logs (msg,created_at,card,date,host_ip,door_name,state) VALUES ('Not Authorized card','"+date+"', "+reader_value+", '"+date+"', '"+get_ip_address('eth0')+"', 'NL_1','failed')")
conn2.commit()
conn2.close()
#cron will send log to server
print "_____________________________________"

注意: If 部分和 else 部分仅执行一次,但插入了 3 条记录,而不是只插入一条记录。

将示例数据写入数据库文件 (local.db)

545|2017-01-28 20:35:44||Authorized card|43448981|2017-01-28 20:35:44|172.20.100.15|NL_1|opened|0
546|2017-01-28 20:35:44||Authorized card|43448981|2017-01-28 20:35:44|172.20.100.15|NL_1|opened|0
547|2017-01-28 20:35:44||Authorized card|43448981|2017-01-28 20:35:44|172.20.100.15|NL_1|opened|0

如何防止这种自动多次输入?

最佳答案

根据示例数据,时间戳和卡 ID 在多个条目中重复。您可以为这两个字段创建唯一索引,这将防止向数据库中插入多个条目。

CREATE UNIQUE INDEX index_card_and_created_at_on_lock_logs ON lock_logs(card, created_at);

此唯一性索引将拒绝这两个字段重复的条目。

关于python - 如何使用Python防止SQLite3中的多个条目(重复),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41914689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com