【发布时间】:2018-10-03 19:34:03
【问题描述】:
我有以下 peewee 模型(简化):
class Foo(BaseModel):
a = IntegerField() # actually a ForeignKey
b = IntegerField(null=True) # ForeignKey
c = IntegerField(null=True) # ForeignKey
d = TextField()
e = TextField(null=True)
我想在字段(a、b、c、d)上创建一个唯一索引,将 NULL 值视为相等。例如应该可以只插入一次 (1, NULL, NULL, 2, NULL)。
我设法编写了原始 SQL 查询来添加索引(-1 应该是安全的,因为 b 和 c 是 int>0 上的外键)
CapsuleTranslatorBundle.add_index(SQL('''CREATE UNIQUE INDEX foo_idx ON foo (
a, # a_id if a is a foreign key
COALESCE(b, -1),
COALESCE(c, -1),
d
);
'''))
我试过了
idx = Foo.index(Foo.a,
fn.COALESCE(Foo.b, -1),
fn.COALESCE(Foo.c, -1),
Foo.d, unique=True)
Foo.add_index(idx)
但是得到了
peewee.OperationalError: near "USING": syntax error
如何在不使用原始 SQL 的情况下添加索引?
【问题讨论】: