bulk_create与ignore_conflicts=True
仅插入新记录,不会更新现有记录。
bulk_update仅更新现有记录,而不会插入新记录。
现在,我发现只有一个变体可以进行upsert的查询:
from catalog.models import Product
with connection.cursor() as cursor:
cursor.executemany(
"""
INSERT INTO app_table (pk, col1, col2)
VALUES (%s, %s, %s)
ON DUPLICATE KEY UPDATE
col1 = VALUES(col1),
col2 = VALUES(col2);
""",
[
('1', 'val1', 'val2'),
('2', 'val1', 'val2'),
]
)
还有另一种在Django中执行批量上载的方法吗?
答案 0 :(得分:0)
在MySQL中,没有一个传统的方法可以在单个查询中使用创建和更新。一世
看到您使用了INSERT ... ON DUPLICATE KEY UPDATE
,这是在这些情况下的常见方法。另一种冗长的方法:
cursor.copy_from()
,然后更新到原始表。此外,如果不需要在日志Ref中设置metadeta,则可以通过增加缓存大小并设置DEBUG=False
来优化性能。
也许还可以使用PostgreSQL测试相同的数据,并检查其是否可以带来更好的性能。