任何人都知道我怎麼能在SQLAlchemy中使用REGEXP_LIKE的等價物?例如,我希望能夠做到這樣的事情:SQLAlchemy中的REGEXP_LIKE
sa.Session.query(sa.Table).filter(sa.Table.field.like(regex-to match))
感謝您的幫助!
任何人都知道我怎麼能在SQLAlchemy中使用REGEXP_LIKE的等價物?例如,我希望能夠做到這樣的事情:SQLAlchemy中的REGEXP_LIKE
sa.Session.query(sa.Table).filter(sa.Table.field.like(regex-to match))
感謝您的幫助!
應該(我有Oracle中沒有接入)的工作是這樣的:
sa.Session.query(sa.Table) \
.filter(sa.func.REGEXP_LIKE(sa.Table.c.column, '[[:digit:]]'))
在情況下,當你需要做哪些不被支持的SQLAlchemy您可以使用文字過濾數據庫中的特定功能。所以,你仍然可以使用SQLAlchemy爲您打造查詢 - 即約聯接等照顧
下面是例子,如何放在一起的文字過濾與PostgreSQL的正則表達式匹配操作~
session.query(sa.Table).filter("%s ~':regex_pattern'" % sa.Table.c.column.name).params(regex_pattern='stack')
,或者你可以手動指定表和列作爲文本字符串的一部分,以避免ambigious列名的情況下
session.query(sa.Table).filter("table.column ~':regex_pattern'" ).params(regex_pattern='[123]')
不好意思,但你的回答在regex_pattern給我一個錯誤。括號是否正確? table.column是否正確?它不應該是sa.Table.column?在任何情況下,即使以這種方式接收錯誤,但我無法知道錯誤是什麼,它只在「1」處或附近說(編程錯誤)語法錯誤。 –
對錯字很抱歉。在regex_pattern之後不應該有括號。請參閱更新版本。還取決於''sa.Table''類型有不同的方式來獲取列。如果它是「Table(..)」,則是用戶「sa.Table.c.column.name」。如果它是映射對象,那麼只是''sa.Table.column.name'' – vvladymyrov
對不起,我不明白,這是我的查詢:sa.Session.query(sa.BaseApparati).filter(「sa .BaseApparati.column.nome〜':regex_pattern'「).params(regex_pattern ='[123]')。all()。表的名稱是「BaseApparati」,列的名稱是「Nome」,那麼正確的輸入是什麼?我仍然收到「編程錯誤...」。謝謝 –
這不是完全可移植的,但這裏是Postgres的解決方案,它使用〜操作。我們因此可以使用任意運營商:
sa.Session.query(sa.Table).filter(sa.Table.field.op('~', is_comparison=True)(regex-to match))
或者,假設默認值爲0的優先級,
sa.Session.query(sa.Table).filter(sa.Table.field.op('~', 0, True)(regex-to match))
這也適用於ORM構建:
sa.Session.query(SomeClass).filter(SomeClass.field.op('~', 0, True)(regex-to match))
FUNC沒有名爲REGEXP_LIKE的屬性。 .c.column的含義是什麼?這是否意味着該領域?我嘗試過.field和.field.column,但都沒有工作 –
您使用的是哪個數據庫? – plaes
PostgreSql ...但不是獨立於數據庫的sqlAlchemy? –