文档显示了如何使用IN操作符,但我找不到如何使用NOT IN操作符。
如果我输入一个not <<我会得到一个语法错误。
如果我把一个not <FieldName> <<放在这里,会有一个WHERE False而不是像WHERE (<FieldName> NOT IN (SELECT ...这样的子查询。
下面是输出和文档示例。第一个是正确的,第二个和第三个是错误的。

>>> Tweet.select().where(Tweet.user << a_users).sql()
('SELECT t1."id", t1."user_id", t1."message", t1."created_date", t1."is_published" FROM "tweet" AS t1 WHERE (t1."user_id" IN (SELECT t2."id" FROM "user" AS t2 WHERE (Lower(Substr(t2."username", ?, ?)) = ?)))', [1, 1, 'a'])
>>> Tweet.select().where(not Tweet.user << a_users).sql()
('SELECT t1."id", t1."user_id", t1."message", t1."created_date", t1."is_published" FROM "tweet" AS t1 WHERE ?', [False])
>>> Tweet.select().where(Tweet.user not << a_users).sql()
SyntaxError: invalid syntax

最佳答案

简单:

Tweet.select().where(Tweet.user.not_in(a_users))

与(x不在y中)相比,语义稍有不同(x不在y中):
Tweet.select().where(~(Tweet.user << a_users))

关于python - 运算符(operator)不在Peewee,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25734566/

10-10 07:41