【问题标题】:Inserting new record into table if it doesn't exist with python and sql如果 python 和 sql 不存在新记录,则将新记录插入表中
【发布时间】:2021-11-14 11:41:11
【问题描述】:

我想在我的 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): 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,了解在 'If Not Exists(SELECT * FROM Accounts WHERE) 附近使用的正确语法Account_Name = DE - Kipling DE) 从第 1 行开始"

如果有任何帮助,我将不胜感激! :)

【问题讨论】:

    标签: python mysql sql python-sql


    【解决方案1】:

    我认为您可以使用INSERT IGNORE,它会忽略数据库会尝试抱怨Duplicate entry 的事实。有关更多信息,请参阅here。在链接中,您可以阅读其他策略(您可能会发现更适合您的需求)

    【讨论】:

    • 啊,是的,我之前尝试过这个,但我意识到我将错误的列设置为唯一列。将 account_name 列设置为唯一可以解决我的问题,谢谢!
    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2014-04-04
    • 2019-06-23
    • 1970-01-01
    • 2018-12-26
    • 2021-03-29
    相关资源
    最近更新 更多