Dav*_*ave 27 python sqlite sqlalchemy
我正在使用SQLAlchemy和SQLite3构建一个查询,我想在其中选择一个String列包含特定子字符串的行.完成此任务的最佳方法是什么?
kar*_*eek 62
试试这个
Model.query.filter(Model.columnName.contains('sub_string'))
Run Code Online (Sandbox Code Playgroud)
Pau*_*ine 30
过滤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))
Run Code Online (Sandbox Code Playgroud)
笔记:
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))
Blu*_*orn 13
虽然table.c.column.like("%...%")
应该有效,但有更直接的方式来表达你想要的东西:
table.c.column.contains("needle")
Run Code Online (Sandbox Code Playgroud)
这通常会生成相同的SQL查询,但最好是为初学者阅读.请注意,包含似乎不会转义为"_"和"%".
@app.route('/<var>', methods=['GET'])
def getdb(var):
look_for = '%{0}%'.format(var)
log1 = table.query.filter(table.col.like(look_for))
Run Code Online (Sandbox Code Playgroud)
我使用过 SQLAlchemy 和 Flask(顶部的 app.route 是一个装饰器)。我使用 get API 来接收用户希望搜索的变量,并通过使用 format() 和log1 存储查询的元组。
归档时间: |
|
查看次数: |
38647 次 |
最近记录: |