python - 如果 python 和 sql 不存在新记录,则将新记录插入表中
问题描述
我想在我的 python 脚本中插入我的 MySQL Workbench 数据库,但是如果某个值已经存在,我试图让它只插入一次时遇到问题。因此,假设我正在插入名称,并且名称“Bob”已经在数据库中,此时我不想再次插入它。
我一直在寻找其他资源,目前正在尝试:
for account in accounts:
sql = ("If Not Exists(SELECT * FROM Accounts WHERE Account_Name = " + str(account) + ") "
"Begin "
"INSERT into Accounts (Account_Name, Account_ID, Formatted_Name, Crawler_Name) VALUES (%s, %s, %s, %s) "
"End")
val = (account, '0', 'test', 'test')
mycursor.execute(sql, val)
mydb.commit()
其中 account 是一些与此处无关的字符串。我基本上想将帐户插入数据库但只有一次,如果它再次运行并且找到相同的帐户,我不想重新插入重复项(常规插入语句会这样做)。
我得到的错误是:“mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'If Not Exists 附近使用的正确语法(SELECT * FROM Accounts WHERE Account_Name = DE - Kipling DE)从第 1 行开始“
我会很感激任何帮助!:)
解决方案
我认为您可以使用INSERT IGNORE
which 将忽略 DB 将尝试抱怨的事实Duplicate entry
。请参阅此处了解更多信息。在链接中,您可以阅读其他策略(您可能会发现更适合您的需求)
推荐阅读
- azure - How to keep folder structure in blob storage when using Data Factory to copy file
- python - 如何在 PyCharm 中创建一个没有文件名/路径的空文件?
- javascript - 如何使用 Barba.js 实现 Facebook 分析
- c++ - 我无法从 max_element() 中获得所需的输出
- powershell - 如何测试具有特定值的注册表项是否存在而不给出错误消息
- xpath - XPATH - 如果找到某个类,则在 div 中获取 URL
- flutter - 使用小部件测试在滑块中选择值
- printing - 如何发现“未找到 AirPrint 打印机”是什么意思?
- java - Connect to websocket in activity A and recieve data in activity B
- ruby-on-rails - Selenium web driver issue with rails server