我正在使用SQLAlchemy和SQLite3構建查詢,其中我想選擇其中String列包含特定子字符串的行。什麼是完成這個最好的方法?SQLAlchemy查詢列中包含子字符串的位置
17
A
回答
21
按db.table.column.like('%needle%')
篩選。對於不區分大小寫的搜索,還有ilike
。
對於一個發燒友界面,你可以允許已知的「dir」通配符。
if '*' in needle or '_' in needle:
looking_for = needle.replace('_', '__')\
.replace('*', '%')\
.replace('?', '_')
else:
looking_for = '%{0}%'.format(needle)
result = db.table.filter(db.table.column.ilike(looking_for))
注:
- 的
db.table.filter
和db.table.column
爲SQLSoup
(SQLSoup如果數據庫是由另一個應用程序所做的是有用的) - 爲SQLAlchemy的核心是
select(column_list).where(table.c.column.ilike(expr))
。當您希望從原始SQL獲得所有權限時,無需使用字符串插值手動編寫語句(使用SQLSoup進行內省,因此您無需聲明表) - SQLAlchemy Declarative (中瓶使用的)是
Model.query.filter(Model.field.ilike(expr))
11
雖然table.c.column.like("%...%")
應該工作,還有一個更直接的方式來表達你想要什麼:
table.c.column.contains("needle")
這通常會產生相同的SQL查詢,但它更好地閱讀爲外行。 請注意,包含似乎不能逃脫「_」和「%」。
+0
像(%...%)不是直接的,不是 - 但我有一組表(模型),將field.contains(k)轉換爲字段LIKE'%%'|| k || '%%' - 沒有呈現正確的結果。 – shermy 2016-05-23 07:59:50
40
試試這個
Model.query.filter(Model.columnName.contains('sub_string'))
相關問題
- 1. 檢查一個字符串是否包含正確位置的子字符串
- 2. 檢查包含子字符串列表的字符串
- 3. SELECT查詢字符串包含'%'字符
- 4. Amazon DynamoDB查詢其中包含子字符串的項目
- 5. 包含在字符串列表中的檢查字符串
- 6. 字符串core.logic查詢包含
- 7. php $ _SERVER ['PHP_SELF']包含查詢字符串
- 8. 查詢PrincipalSearcher包含多個字符串
- 9. MySQL查詢字符串包含
- 10. sql查詢字符串包含在C#
- 11. MySQL查詢字符串包含相反
- 12. CAML查詢 - 包含空字符串
- 13. 查詢包含許多字符串
- 14. 確定一個字符串是否包含特定位置的子字符串
- 15. 查找包含字符串數組中子字符串的所有字符串
- 16. Mongoose查詢字段不包含子字符串
- 17. 如何包含在查詢字符串中的特殊字符
- 18. 查找包含特定字符串的單元格的位置
- 19. 檢查字符串是否包含字(不是子字符串!)
- 20. 檢查字符串包含字符串
- 21. 查詢完全包含查詢的一部分的字符串
- 22. 檢查列表包含字符串
- 23. 檢查字符串列表中的字符子集是否包含在另一個字符串列表中
- 24. SQLite字符串包含其他字符串查詢
- 25. 檢查字符串包含的字符
- 26. 按列包含字符串的SQL Server查詢順序
- 27. 熊貓:查詢字符串,其中列名中包含特殊字符
- 28. Oracle查詢查找字符串不包含字符
- 29. 檢查字符串是否包含子字符串
- 30. 檢查字符串中的指定位置是否包含字母或數字
你能告訴我們在燒瓶SQLAlchemy的 – Wally 2015-01-05 13:15:25
@Wally燒瓶SQLAlchemy的查詢是方便包連接到SQLAlchemy的燒瓶。與SQLAlchemy Declarative相比,查詢不會發生變化。 – Laogeodritt 2016-09-22 16:10:59