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

时间:2015-10-28 01:02:47

标签: python postgresql python-2.7 peewee

我使用以下代码片段创建我的架构:

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(尝试过不同的版本)。

1 个答案:

答案 0 :(得分:1)

您应该使用Model.create_table() API来处理创建表和索引。

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

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

所以:

db.create_tables([Actor])

或者:

Actor.create_table()