Peewee中的字符串匹配(SQL)

Ben*_*Ben 7 sql peewee

我试图在Peewee中查询应该具有特定子字符串的结果.

例如,如果我只想在名称中包含"Physics"的活动:

schedule = Session.select().join(Activity).where(Activity.name % "%Physics%").join(Course).join(StuCouRel).join(Student).where(Student.id == current_user.id)
Run Code Online (Sandbox Code Playgroud)

上面的示例没有给出任何错误,但无法正常工作.

在python中,我会这样做if "Physics" in Activity.name,所以我正在寻找一个可以在查询中使用的等价物.

jha*_*ell 23

你也可以使用这些查询方法:.contains(substring),.startswith(prefix),.endswith(suffix).

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

.where(Activity.name.contains("Physics"))
Run Code Online (Sandbox Code Playgroud)

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


col*_*fer 14

快速回答:

只是用 Activity.name.contains('Physics')


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

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

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