[英]SQLAlchemy case insensitive IN based search query?
如何以安全的方式在SQLAclhemy ORM中進行不區分大小寫的搜索?
我自己和我項目中的其他人都在尋找這個,但我們似乎無法找到任何符合我們需求的東西。
在原始SQL中,我可以這樣做:
SELECT * FROM TABLENAME WHERE UPPER(FIELDNAME) IN (UPPER('foo'), UPPER('bar'));
..如果FOO和BAR在未知情況下不是用戶輸入。 事實上,我擔心以下情況:
如果它有幫助我們目前綁定到8.4版本的SQLAlchemy由於我們使用其他庫。
這應該完全編譯...
query( models.Object )\
.filter(
sqlalchemy.func.upper( models.Object.fieldname )\
.in_( (sqlalchemy.func.upper(foo) , sqlalchemy.func.upper(bar), ) )
)\
.all()
你也可以傳入大寫文字。 個人而言,我會做in_( foo.uppercase() , bar.uppercase() )
SqlAlchemy與DBAPI一起將綁定參數傳遞到后端數據存儲區。 翻譯 - 值會自動轉義。
如果你想做一個字符串列表,這樣的東西應該工作
.in_( [ i.upper() for i in inputs ] )
.in_( [ sqlalchemy.func.upper(i) for i in inputs ] )
只想添加一下,如果你想優化這些選擇速度,並且在Postgres或Oracle上,你可以創建一個'功能索引'
CREATE INDEX table_fieldname_lower_idx ON table(lower(fieldname))
查詢計划程序(在數據庫中)將知道在搜索lower(fieldname)
查詢時使用該lower(fieldname)
索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.