python 是否应在UPDATE中添加主键列?

gwo2fgha  于 2023-01-04  发布在  Python
关注(0)|答案(2)|浏览(87)

在下面的示例代码中,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()
byqmnocz

byqmnocz1#

没有必要更新唯一键或主键,因此您的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()
4xrmg8kj

4xrmg8kj2#

如果您没有其他唯一键可以导致执行ON DUPLICATE,则col1和col2不会更改,您应该将其删除。
如果您确实有其他唯一键,那么您可能并不希望更改col1和col2。

相关问题