[bulk\_create](https://docs.djangoproject.com/en/1.11/ref/models/querysets/#django.db.models.query.QuerySet.bulk_create) with `ignore_conflicts=True` insert new records only and doesn't update existing one. 
[bulk\_update](https://docs.djangoproject.com/en/2.2/ref/models/querysets/#bulk-update) updates only existing records and doesn't insert new one.

Now I see only one variant to make upsert is a raw query:

```py
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'),
        ]
    )

```

Is there another way to perform bulk upsert in Django?