仅当其他表中不存在时才将记录插入表中 - MySQL

时间:2017-01-19 09:42:10

标签: mysql database

我正在做一些蓝牙项目,我有一个设备嗅探MAC地址。我希望将那些嗅探的地址保存到某个表格中(在我的案例中称为“访客”)。

enter image description here

现在,问题是。表I_year_student和II_year_student将有一个手动插入的记录。我希望将所有找到的设备保存到表“访客”中。问题是:有时一个已经在表I_year_student中的MAC地址将再次被设备嗅探,当然,它将再次保存到数据库,更准确地说,保存到“访问者”表中。现在我在两个不同的表中有两个相同的记录,我不希望这发生。

有没有办法,在我的设备找到某个MAC地址后,检查该记录是否已存在于其他表中。像这样:

  • 我找到了一个“新的”MAC地址
  • 在将该记录插入“Visitors”表之前,请检查数据库中的其他表中是否有类似的记录。
  • 如果有类似记录,请忽略它。
  • 如果记录是唯一的,请将其保存到“访客”表

用于嗅探和输入表格的部分代码访问者如下:

if len(nearby_devices) > 0:
print(len(nearby_devices))

for addr, name in nearby_devices:
    try:

        cur.execute("""INSERT INTO Visitors
                           (Address, Name)
                       VALUES
                           (%s,%s)
                    """, (addr, name)
                   )
        con.commit()

1 个答案:

答案 0 :(得分:0)

好的,谢谢大家的帮助,但我想我找到并回答并设法解决问题:

我的情况是这样的。我有一个设备总是在蓝牙协议上嗅探MAC地址,我想将我找到的所有地址保存到MySQL数据库以供以后处理。此外,我想通过基于不同的配置文件将它们分开来保存这些地址,例如:

  • mac_address1:列:ProfileID( typeA
  • mac_address2:列:ProfileID( typeB
  • mac_address3:列:ProfileID( typeC ),依此类推......

问题是我的数据库已经有一些手动添加的mac地址,我不想要我的新地址(也可能是旧的,因为有些设备可以再次进入嗅探区域)再次保存在一些ProfileID下,虽然我已经将它们放在其他一些ProfileID下。

所以,经过一番思考后我编写了查询并测试了它,现在它运行正常。

cur.execute("""INSERT INTO ordenador
                           (Address, Name, ProfileID)
                       VALUES
                           (%s,%s,'public')
                       ON DUPLICATE KEY UPDATE
                       ProfileID = VALUES(ProfileID)
                    """, (addr, name)
                   )

现在,当我的设备捕获一个“新的”mac地址时,他将该记录输入到“ordenador”表中,如果“new”mac地址的记录已存在,那么它只是将记录更新为旧记录。在其他情况下,如果该记录不存在,则查询在ProfileID下输入记录,在我的情况下为“public”。

欢迎所有的建议和想法。我希望这对那些已经遇到类似问题的人有所帮助。