簡體   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