【问题标题】:MariaDB / MySQL INSERT INTO / ON DUPLICATE KEY UPDATE in PythonMariaDB / MySQL INSERT INTO / ON DUPLICATE KEY UPDATE 在 Python 中
【发布时间】:2019-02-27 07:49:27
【问题描述】:

我正在尝试 INSERT INTO / ON DUPLICATE KEY UPDATE 从一个表中获取值并插入到另一个表中。我有以下 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

【问题讨论】:

  • 您可以尝试在execute 调用中将参数设置为(*row, row[-1]) 而不是row 吗?

标签: python mysql mariadb


【解决方案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 方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2017-09-01
    相关资源
    最近更新 更多