应该在UPDATE中添加主键列吗?



在下面的示例代码中,col1col2主键在数据库中!

我的问题是:是否应该添加ON DUPLICATE KEY UPDATE之后的部分代码中或者它们不应该被添加

?示例代码:

with Dl.cursor() as cursor:
for chunk in np.array_split(DataFrame, 10, axis=0):
for i in chunk.index:
cursor.execute("INSERT INTO table_example (col1, col2, col3, col4) VALUES (%s, %s, %s, %s) ON DUPLICATE KEY UPDATE col1 = col1, col2 = col2, col3 = col3, col4 = col4;", (chunk['col1'][i], chunk['col2'][i], chunk['col3'][i], chunk['col4'][i]))
                                                   # col3 = col3, col4 = col4; ... Which version is correct?
Dl.commit()
cursor.close()
Dl.close()

不需要更新唯一键或主键,因此您的SQL可以像这样:

INSERT INTO table_example (col1, col2, col3, col4)
VALUES ('col1', 'col2', 'col3', 'col4')
ON DUPLICATE KEY UPDATE col3 = :col3, col4 = :col4

SQL已经知道它在col1和col2的上下文中作为重复键。

所以对于你的代码,它应该是这样的:
with Dl.cursor() as cursor:
for chunk in np.array_split(DataFrame, 10, axis=0):
for i in chunk.index:
cursor.execute("""
INSERT INTO table_example (col1, col2, col3, col4) 
VALUES (%s, %s, %s, %s) 
ON DUPLICATE KEY UPDATE col3 = %s, col4 = %s;""", 
(chunk['col1'][i], chunk['col2'][i], chunk['col3'][I], 
chunk['col4'][i]), chunk['col3'][i], chunk['col4'][i]))
Dl.commit()
cursor.close()

如果您没有其他可能导致ON DUPLICATE执行的唯一键,则col1和col2不会更改,您应该忽略它们。

如果你有其他唯一键,你可能不希望改变col1和col2。

相关内容

  • 没有找到相关文章

最新更新