我正在制作一个脚本,将数据插入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))
通常的方法是在创建的表定义中创建一个“唯一索引”。那么任何代码都不可能插入重复的代码。在我们的例子中,唯一的约束列是(DeviceID,Date)
有了这种安全性,程序可以做以下几件事之一:(1)尝试插入,如果插入失败并出现重复错误,则根据需要进行更新(2) 首先尝试选择,如果成功则更新else insert(3) 许多数据库都有一种机制来执行所谓的“UPSERT”,即插入和更新(如果存在)的组合
查看您的查询,我发现您正在检查
Date+DeviceID
组合。所以,我假设这两种形式是一个唯一的ID,通过它,您可以在表上创建一个唯一的索引,以防止重复。示例:然后您可以简单地使用
INSERT IGNORE
,如下所示:相关问题 更多 >
编程相关推荐