8

我正在尝试在 Peewee 中查询应该包含特定子字符串的结果。

例如,如果我只想要名称中带有“物理”的活动:

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,所以我正在寻找可以在查询中使用的等价物。

4

2 回答 2

29

您还可以使用以下查询方法:.contains(substring), .startswith(prefix), .endswith(suffix).

例如,您的 where 子句可能是:

.where(Activity.name.contains("Physics"))

我相信这是不区分大小写的,并且行为与 LIKE '%Physics%'.

于 2015-11-11T17:03:03.763 回答
19

快速回答:

只需使用Activity.name.contains('Physics')


根据您使用的数据库后端,您需要选择正确的“通配符”。Postgresql 和 MySQL 使用“%”,但对于 Sqlite,如果您正在执行LIKE查询,您实际上会想要使用“*”(尽管对于 ILIKE,它是“%”,令人困惑)。

我猜你正在使用 SQLite,因为上面的查询失败了,所以回顾一下,如果你想要区分大小写的部分字符串匹配:Activity.name % "*Physics*"和不区分大小写: ,使用 SQLite Activity.name ** "%Physics%"

http://www.sqlite.org/lang_expr.html#like

于 2013-12-15T17:21:50.577 回答