[英]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.