在mysql和python中如何防止表中出现重复条目

2024-10-01 01:48:10 发布

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

我正在制作一个脚本,将数据插入MySQL数据库,我每天只需要从多个传感器插入一次数据,但我找不到防止多个条目的方法。是否有方法检查条目是否存在,如果不存在,则只插入数据? 下面是我的代码中包含语法错误的部分。 对不起,如果这个错误很明显,我是SQL新手

 mycursor.execute('''
        SELECT * FROM MotorControlDB.FSYesterdayVolume
        IF Date = %s AND DeviceID = %s THEN
          INSERT INTO MotorControlDB.FSYesterdayVolume(DeviceID, VolumeYesterday, Date)
          VALUES (%s, '%s', '%s')
        END IF
        ''', (YesterdayDate, '2-ES-WC-FS', '2-ES-WC-FS', EastVolumeYesterday, YesterdayDate))

Tags: 数据方法脚本数据库dateifesmysql
2条回答

通常的方法是在创建的表定义中创建一个“唯一索引”。那么任何代码都不可能插入重复的代码。在我们的例子中,唯一的约束列是(DeviceID,Date)

有了这种安全性,程序可以做以下几件事之一:(1)尝试插入,如果插入失败并出现重复错误,则根据需要进行更新(2) 首先尝试选择,如果成功则更新else insert(3) 许多数据库都有一种机制来执行所谓的“UPSERT”,即插入和更新(如果存在)的组合

查看您的查询,我发现您正在检查Date+DeviceID组合。所以,我假设这两种形式是一个唯一的ID,通过它,您可以在表上创建一个唯一的索引,以防止重复。示例:

CREATE UNIQUE INDEX uniq_idx
ON MotorControlDB.FSYesterdayVolume(Date,DeviceID);

然后您可以简单地使用INSERT IGNORE,如下所示:

INSERT IGNORE INTO MotorControlDB.FSYesterdayVolume(DeviceID, VolumeYesterday, Date)
VALUES (%s, '%s', '%s')

相关问题 更多 >