我试图在Peewee中查询应该有特定子字符串的结果。
例如,如果我只想在名称中使用“Physics”的活动:
schedule = Session.select().join(Activity).where(Activity.name % "%Physics%").join(Course).join(StuCouRel).join(Student).where(Student.id == current_user.id)
上面的示例没有给出任何错误,但无法正常工作。
在python中,我只会做if "Physics" in Activity.name
,所以我正在寻找一个可以在查询中使用的等价物。
答案 0 :(得分:21)
您还可以使用these查询方法:.contains(substring)
,.startswith(prefix)
,.endswith(suffix)
。
例如,您的where子句可以是:
.where(Activity.name.contains("Physics"))
我认为这不区分大小写,其行为与LIKE '%Physics%'
相同。
答案 1 :(得分:13)
快速回答:
只需使用Activity.name.contains('Physics')
根据您使用的数据库后端,您需要选择正确的“通配符”。 Postgresql和MySQL使用“%”,但对于Sqlite,如果你正在执行LIKE
查询,你实际上想要使用“*”(虽然对于ILIKE它是“%”,令人困惑)。
我猜你正在使用SQLite,因为上面的查询失败了,所以回顾一下,如果你想要区分大小写的匹配,请使用SQLite:Activity.name % "*Physics*"
,并且不区分大小写: Activity.name ** "%Physics%"
。