简体   繁体   English

使用 peewee 的唯一共同约束

[英]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() ),但我正在寻找另一种方式。

Updated:更新:

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中我给出了以下内容(为简单起见,省略了与事务相关的BEGINCOMMIT ,并且打算使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM