[英]SQLAlchemy query where a column contains a substring
我正在使用 SQLAlchemy 和 SQLite3 構建一個查詢,其中我想要 select 行,其中字符串列包含特定的 substring。 實現這一目標的最佳方法是什么?
嘗試這個
Model.query.filter(Model.columnName.contains('sub_string'))
按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))
筆記:
雖然table.c.column.like("%...%")
應該可以工作,但有更直接的方式來表達你想要的東西:
table.c.column.contains("needle")
這通常會生成相同的SQL查詢,但最好是為初學者閱讀。 請注意,包含似乎不會轉義為“_”和“%” 。
@app.route('/<var>', methods=['GET'])
def getdb(var):
look_for = '%{0}%'.format(var)
log1 = table.query.filter(table.col.like(look_for))
我使用過SQLAlchemy和Flask(頂部的app.route是一個裝飾器)。 我使用get API來接收用戶希望搜索的變量,並且我正在轉換該變量以將其存儲在另一個名為look_for的變量中(因為var不能直接在查詢中使用),使用format()和log1存儲查詢的元組。
這是在 sqlalchemy 的最新版本中 di 的一種方法
query = select(table_name).where(table_name.column.contains("value_youre_searching_for"))
results = await db.execute(query)
data = results.scalars().all()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.