[英]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
。 这很好,但如果我的用户名包含输入的所有字符,无论它们的顺序如何,我也希望它能够工作。
例如,我希望所有Marcus
、 sucraM
和MiWl
都过滤我的用户名,因为在所有情况下,输入中的字符都存在于用户名中。
我尝试了几件事,例如检查输入中的字符集是否是用户名字符集的子集,但 SQLAlchemy 查询中的逻辑受到限制,因此无法正常工作。
抱歉,如果我缺少一个简单的解决方案,我们将不胜感激。
更新:
在@shipskin 的回答和一些编辑的帮助下,我取得了一些进展。
通过做这个:
User.query.filter(User.username.op('regexp')(".*".join(list(input))))
我现在可以匹配用户名中包含所有字符的字符,但仍然存在问题。 字符仍然必须按照它们在用户名中出现的顺序排列,例如MWil
可以工作,但WMill
不起作用,因为这些字符在我的用户名中没有按该顺序出现。
您可以执行类似Users.query.filter(User.username.op('regexp')('|'.join([c for c in input]))
的操作或生成更好的正则表达式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.