与Django批量上传

时间:2019-11-21 18:07:03

标签: python mysql django upsert

bulk_createignore_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中执行批量上载的方法吗?

1 个答案:

答案 0 :(得分:0)

在MySQL中,没有一个传统的方法可以在单个查询中使用创建和更新。一世  看到您使用了INSERT ... ON DUPLICATE KEY UPDATE,这是在这些情况下的常见方法。另一种冗长的方法:

  • 更新临时表中的部分数据,基本上将其复制到临时表-> cursor.copy_from(),然后更新到原始表。

此外,如果不需要在日志Ref中设置metadeta,则可以通过增加缓存大小并设置DEBUG=False来优化性能。

也许还可以使用PostgreSQL测试相同的数据,并检查其是否可以带来更好的性能。