运算符 "NOT LIKE" with peewee
Operator "NOT LIKE" with peewee
我需要一个查询,其中内容“不喜欢”是
的一个值
query = (Table
.select()
.where((Table.lastseen < olddate.isoformat()) &
(Table.used==1) &
(Table.ip !% '%/%' ))
.order_by(Table.lastseen.asc())
)
!行不通,如何取消 LIKE?
您必须使用 ~
而不是 !
。这就是否定在 peewee
中的工作原理。您需要使用括号将您希望否定的查询包装起来。在你的情况下 (~(Table.ip % '%/%' ))
.
query = (Table
.select()
.where((Table.lastseen < olddate.isoformat()) &
(Table.used==1) &
(~(Table.ip % '%/%' )))
.order_by(Table.lastseen.asc())
)
最小可重现示例(摘自 peewee 文档的片段)
from datetime import date
from peewee import *
db = SqliteDatabase('people.db')
class Person(Model):
name = CharField()
birthday = DateField()
class Meta:
database = db # This model uses the "people.db" database.
db.connect()
db.create_tables([Person])
uncle_bob = Person(name='Bob', birthday=date(1960, 1, 15))
uncle_bob.save()
aunt_alice = Person(name='Alice', birthday=date(1965, 1, 15))
aunt_alice.save()
query = Person.select().where(~(Person.name % 'B*')) # not like 'B%', wildcard changes according to database, `*` instead of `%` for SQLite
for i in query:
print(i.name) # Alice
我需要一个查询,其中内容“不喜欢”是
的一个值query = (Table
.select()
.where((Table.lastseen < olddate.isoformat()) &
(Table.used==1) &
(Table.ip !% '%/%' ))
.order_by(Table.lastseen.asc())
)
!行不通,如何取消 LIKE?
您必须使用 ~
而不是 !
。这就是否定在 peewee
中的工作原理。您需要使用括号将您希望否定的查询包装起来。在你的情况下 (~(Table.ip % '%/%' ))
.
query = (Table
.select()
.where((Table.lastseen < olddate.isoformat()) &
(Table.used==1) &
(~(Table.ip % '%/%' )))
.order_by(Table.lastseen.asc())
)
最小可重现示例(摘自 peewee 文档的片段)
from datetime import date
from peewee import *
db = SqliteDatabase('people.db')
class Person(Model):
name = CharField()
birthday = DateField()
class Meta:
database = db # This model uses the "people.db" database.
db.connect()
db.create_tables([Person])
uncle_bob = Person(name='Bob', birthday=date(1960, 1, 15))
uncle_bob.save()
aunt_alice = Person(name='Alice', birthday=date(1965, 1, 15))
aunt_alice.save()
query = Person.select().where(~(Person.name % 'B*')) # not like 'B%', wildcard changes according to database, `*` instead of `%` for SQLite
for i in query:
print(i.name) # Alice