我正在使用SQLAlchemy和SQLite3构造一个查询,在这个查询中,我想选择String列中包含特定子字符串的行。完成这个任务的最佳方法是什么?
ggazkfy81#
可以使用contains运算符进行筛选:
contains
Model.query.filter(Model.columnName.contains('sub_string'))
若要在中求反,请使用not_运算子:
not_
Model.query.filter(not_(Model.columnName.contains('sub_string')))
9njqaruj2#
按db.table.column.like('%needle%')过滤。还有ilike用于不区分大小写的搜索。对于一个更好的界面,你可以允许已知的"dir"通配符。
db.table.column.like('%needle%')
ilike
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
select(column_list).where(table.c.column.ilike(expr))
Model.query.filter(Model.field.ilike(expr))
2fjabf4q3#
虽然table.c.column.like("%...%")应该可以工作,但有一种更直接的方式来表达您的需求:
table.c.column.like("%...%")
table.c.column.contains("needle")
这通常会生成相同的SQL查询,但最好是为未启动的用户读取。请注意,contains似乎不会转义**"_"和"%"**。
vecaoik14#
@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接收用户希望搜索的变量,并使用format()将该变量转换为另一个名为look_for的变量(因为var不能直接用于查询),log1存储查询的元组。
gupuwyp25#
下面是在最新版本的sqlalchemy中执行di的方法。
query = select(table_name).where(table_name.column.contains("value_youre_searching_for")) results = await db.execute(query) data = results.scalars().all()
5条答案
按热度按时间ggazkfy81#
可以使用
contains
运算符进行筛选:若要在中求反,请使用
not_
运算子:9njqaruj2#
按
db.table.column.like('%needle%')
过滤。还有ilike
用于不区分大小写的搜索。对于一个更好的界面,你可以允许已知的"dir"通配符。
备注:
db.table.filter
和db.table.column
用于SQLSoup
(如果数据库由另一个应用程序创建,则SQLSoup很有用)select(column_list).where(table.c.column.ilike(expr))
。如果您希望从原始SQL获得所有功能,而不必使用字符串插值手动编写语句,则可以使用此接口(将它与SQLSoup一起用于内省,因此您不需要声明表)Model.query.filter(Model.field.ilike(expr))
2fjabf4q3#
虽然
table.c.column.like("%...%")
应该可以工作,但有一种更直接的方式来表达您的需求:这通常会生成相同的SQL查询,但最好是为未启动的用户读取。请注意,contains似乎不会转义**"_"和"%"**。
vecaoik14#
我使用了SQLAlchemy和Flask(app.route是一个装饰器),我使用get API接收用户希望搜索的变量,并使用format()将该变量转换为另一个名为look_for的变量(因为var不能直接用于查询),log1存储查询的元组。
gupuwyp25#
下面是在最新版本的sqlalchemy中执行di的方法。