Python Peewee 没有在 postgres 中创建唯一约束

Python Peewee not creating unique constraints in postgres

我正在使用这段代码创建我的模式:

from peewee import *

db = PostgresqlDatabase('db', user='user', password='pass', host="localhost")

class Actor(Model):
    name = TextField(unique=True)

db.create_table(Actor)

不幸的是,peewee 似乎没有添加 UNIQUE 约束。

输出SQL:

-- Table: actor

-- DROP TABLE actor;

CREATE TABLE actor
(
  id serial NOT NULL,
  name text NOT NULL,
  CONSTRAINT actor_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE actor
  OWNER TO user;

事实上,我可以添加具有相同 name 的多行。

知道出了什么问题吗? 非常感谢大家:)

如果这很重要,我正在使用 postgres 9.3.10...python 2.7.6,peewee 2.6.4(虽然尝试了不同的版本)。

您应该使用 Model.create_table() API,它处理创建 table 和索引。

或者,您可以调用 db.create_tables(),它可以解决模型依赖关系并以适当的顺序创建多个 table(和索引)。

db.create_table(),您正在使用的 API,只是创建 table 本身——没有索引。

所以:

db.create_tables([Actor])

或:

Actor.create_table()