皮威。如何在特定列的约束上产生冲突?

Peewee. How generate on conflict on constrain for specified column?

我将 peewee 与 postgresql 结合使用。我尝试为许多条目插入生成查询并解决指定列的插入冲突。

models.py

from peewee import *

from datetime import date

from db_init import db


class User(Model):
    username = CharField(constraints=[SQL('CONSTRAINT unique_username UNIQUE')], 
                         max_length=100, unique=True)
    date_create = DateField(default=date.today)

    class Meta:
        table_name = '_users'
        database = db

我运行这个代码

usernames = [f'username{i}' for i in range(5)]
data = [{'username': username} for username in usernames]
q = User.insert_many(data, fields=[User.username])
q2 = q.on_conflict(action='IGNORE', conflict_target=[User.username])

并期望生成

INSERT INTO "_users" ("username", "date_create") VALUES ('username0', '2021-06-01'), ('username1', '2021-06-01'), ('username2', '2021-06-01'), ('username3', '2021-06-01'), ('username4', '2021-06-01') ON CONFLICT ("username") DO NOTHING RETURNING "_users"."id"

但是 peewee 在 ON CONFLICT 语句中生成没有特定列的查询

INSERT INTO "_users" ("username", "date_create") VALUES ('username0', '2021-06-01'), ('username1', '2021-06-01'), ('username2', '2021-06-01'), ('username3', '2021-06-01'), ('username4', '2021-06-01') ON CONFLICT DO NOTHING RETURNING "_users"."id"

请解释我做错了什么?

这已在 Peewee github.com/coleifer/peewee/commit/… 中修复 - 以前 Peewee 在操作为 DO NOTHING/IGNORE 时不支持冲突目标。此补丁允许指定冲突目标