[英]Unique together constraint using peewee
Is it way to apply unique by two columns constraint to model using peewee.是否可以使用 peewee 将唯一的两列约束应用于 model。 There are raw way (using
SQL()
) but I'm finding another.有原始方式(使用
SQL()
),但我正在寻找另一种方式。
I'm using postgres so I tried to do like @booshong says below then in raw SQL I gave the following (for simplicity transaction related BEGIN
and COMMIT
omitted and output was intended):我正在使用postgres,所以我尝试像@booshong在下面所说的那样做,然后在原始SQL中我给出了以下内容(为简单起见,省略了与事务相关的
BEGIN
和COMMIT
,并且打算使用output):
CREATE TABLE IF NOT EXISTS "foo" (
"id" SERIAL NOT NULL PRIMARY KEY,
"field_1" VARCHAR(255) NOT NULL,
"field_2" VARCHAR(255) NOT NULL);
CREATE UNIQUE INDEX IF NOT EXISTS "foo_field_1_field_2"
ON "foo" ("field_1", "field_2");
CREATE TABLE IF NOT EXISTS "foo2" (
"id" SERIAL NOT NULL PRIMARY KEY,
"field_1" VARCHAR(255) NOT NULL,
"field_2" VARCHAR(255) NOT NULL,
UNIQUE (field_1, field_2));
And as we can see it's different things as I say earlier.正如我们所看到的,这与我之前所说的不同。
class Foo(BaseModel):
field_1 = CharField()
field_2 = CharField()
class Meta:
indexes = (
(('field_1', 'field_2'), True),
)
class Foo2(BaseModel):
field_1 = CharField()
field_2 = CharField()
class Meta:
constraints = [SQL('UNIQUE (field_1, field_2)')]
Foo.create_table()
Foo2.create_table()
-- MySQL v8
show create table foo;
>> CREATE TABLE `foo` (
`id` int NOT NULL AUTO_INCREMENT,
`field_1` varchar(255) NOT NULL,
`field_2` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `foo_field_1_field_2` (`field_1`,`field_2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
show create table foo2;
>> CREATE TABLE `foo2` (
`id` int NOT NULL AUTO_INCREMENT,
`field_1` varchar(255) NOT NULL,
`field_2` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `field_1` (`field_1`,`field_2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
The two tables are equivalent.这两个表是等价的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.