MariaDB / MySQL在Python中插入/在重复密钥更新中

时间:2019-02-27 07:49:28

标签: python mysql mariadb

我正在尝试在一个表中插入/进行重复键更新,以将一个表中的值插入另一个表中。我有以下Python代码。

try:
    cursor.execute("SELECT LocationId, ProviderId FROM CQCLocationDetailsUpdates")
    rows = cursor.fetchall()
    for row in rows:
        maria_cnxn.execute('INSERT INTO CQCLocationDetailsUpdates2 (LocationId, ProviderId) VALUES (%s,%s) ON DUPLICATE KEY UPDATE ProviderId = VALUES(%s)', row)
        mariadb_connection.commit()

except TypeError as error:
    print(error)
    mariadb_connection.rollback()

如果我仅将此脚本更改为INSERT INTO即可正常工作,则问题似乎出在我添加ON DUPLICATE KEY UPDATE时。我有什么问题? LocationIdPRIMARY KEY

我收到此错误。

Traceback (most recent call last):
  File "C:/Users/waynes/PycharmProjects/DRS_Dev/CQC_Locations_Update_MariaDB.py", line 228, in <module>
    maria_cnxn.execute('INSERT INTO CQCLocationDetailsUpdates2 (LocationId, ProviderId) VALUES (%s,%s) ON DUPLICATE KEY UPDATE ProviderId = VALUES(%s)', row)
  File "C:\Users\waynes\PycharmProjects\DRS_Dev\venv\lib\site-packages\mysql\connector\cursor.py", line 548, in execute
    stmt = RE_PY_PARAM.sub(psub, stmt)
  File "C:\Users\waynes\PycharmProjects\DRS_Dev\venv\lib\site-packages\mysql\connector\cursor.py", line 79, in __call__
    "Not enough parameters for the SQL statement")
mysql.connector.errors.ProgrammingError: Not enough parameters for the SQL statement

1 个答案:

答案 0 :(得分:1)

您的错误是因为row是2个元素的元组,并且您的SQL语句需要三个%s变量。

不过,可以像这样使用INSERT .. SELECT .. ON DUPLICATE KEY

maria_cnxn.execute('INSERT INTO CQCLocationDetailsUpdates2 (LocationId, 
 ProviderId)
 SELECT LocationId, ProviderId
 FROM CQCLocationDetailsUpdates orig
 ON DUPLICATE KEY UPDATE CQCLocationDetailsUpdates2.ProviderID = orig.ProviderID')

每当您最终围绕SQL语句执行循环时,都应查看是否有SQL方式来执行此操作。