繁体   English   中英

SQLAlchemy 过滤包含 substring 的所有字符的属性,无论顺序如何

[英]SQLAlchemy filter for attributes containing all characters of substring, regardless of order

我在尝试为我的 Flask 应用程序设置 SQLAlchemy 查询时遇到问题。

我想要做的是在数据库中查询包含任何顺序输入字符的所有用户名。

我知道您可以使用User.query.filter(User.username.contains(input))来检查 substring 是否存在,但 substring 必须是为了这个。

例如,使用该表达式,如果我的输入是Marcus ,那么它将起作用,过滤我的用户名MarcusWilliams 这很好,但如果我的用户名包含输入的所有字符,无论它们的顺序如何,我也希望它能够工作。

例如,我希望所有MarcussucraMMiWl都过滤我的用户名,因为在所有情况下,输入中的字符都存在于用户名中。

我尝试了几件事,例如检查输入中的字符集是否是用户名字符集的子集,但 SQLAlchemy 查询中的逻辑受到限制,因此无法正常工作。

抱歉,如果我缺少一个简单的解决方案,我们将不胜感激。

更新:

在@shipskin 的回答和一些编辑的帮助下,我取得了一些进展。

通过做这个:

User.query.filter(User.username.op('regexp')(".*".join(list(input))))

我现在可以匹配用户名中包含所有字符的字符,但仍然存在问题。 字符仍然必须按照它们在用户名中出现的顺序排列,例如MWil可以工作,但WMill不起作用,因为这些字符在我的用户名中没有按该顺序出现。

看看https://docs.sqlalchemy.org/en/14/core/sqlelement.html#sqlalchemy.sql.expression.ColumnOperators.regexpmatch

您可以执行类似Users.query.filter(User.username.op('regexp')('|'.join([c for c in input]))的操作或生成更好的正则表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM