皮威。如何在特定列的约束上产生冲突?
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 时不支持冲突目标。此补丁允许指定冲突目标
我将 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 时不支持冲突目标。此补丁允许指定冲突目标