高级过滤器#
dataset
提供两种运行查询的方法:table.find()
和 db.query()
。表查找辅助方法提供有限但简单的过滤选项
results = table.find(column={operator: value})
# e.g.:
results = table.find(name={'like': '%mole rat%'})
一种特殊形式是在特定列上使用关键字搜索
results = table.find(value=5)
# equal to:
results = table.find(value={'=': 5})
# Lists, tuples and sets are turned into `IN` queries:
results = table.find(category=('foo', 'bar'))
# equal to:
results = table.find(value={'in': ('foo', 'bar')})
支持以下比较运算符
运算符 |
描述 |
---|---|
gt, > |
大于 |
lt, < |
小于 |
gte, >= |
大于或等于 |
lte, <= |
小于或等于 |
!=, <>, not |
不等于单个值 |
in |
值在给定序列中 |
notin |
值不在给定序列中 |
like, ilike |
文本搜索,ILIKE 不区分大小写。使用 |
notlike |
类似文本搜索,但检查模式是否不存在 |
between, .. |
值在给定元组中的两个值之间 |
startswith |
字符串以开头 |
endswith |
字符串以结尾 |
查询不存在于表中的列上的特定值将返回无结果。
您还可以通过回退到 dataset 包装的 SQLAlchemy 核心对象,将其他 SQLAlchemy 子句传递到 table.find()
方法中
# Get the column `city` from the dataset table:
column = table.table.columns.city
# Define a SQLAlchemy clause:
clause = column.ilike('amsterda%')
# Query using the clause:
results = table.find(clause)
这也可以用于定义组合的 OR 子句(例如 city = ‘Bla’ OR country = ‘Foo’)。
使用原始 SQL 的查询#
要运行更复杂的查询(包括 JOIN 或执行 GROUP BY 样式的聚合),您也可以使用 db.query()
来运行原始 SQL 查询。这也支持参数化以避免 SQL 注入。
最后,如果您正在寻找一种以编程方式组合生成 SQL 的方法,您应该考虑回退到 SQLAlchemy 核心来构建查询。