select_raw¶
- FactTable.select_raw(columns=None, where=None, distinct=False, groupby=None, having=None, orderby=None, order=Order.asc, limit=None, offset=None)¶
根据查询条件从数据表获取数据
根据查询条件查询数据表接口并返回。 数据类型将只含有 JSON基本数据类型
- 参数
where (
Union
[str
,Term
,EmptyCriterion
,None
]) – 查询条件(聚合条件也可以)distinct (
bool
) – 是否使用select distinct语法groupby (
Optional
[Iterable
[Union
[str
,int
,Term
]]]) – 用于groupby的列having (
Optional
[Iterable
[Union
[Term
,EmptyCriterion
]]]) – 用于having语句的条件orderby (
Optional
[Iterable
[Union
[str
,Field
]]]) – 用于orderby的列
示例
import pypika.functions as pf tbl = DataTableMySQL("example") t = tbl.table
执行全表查询
tbl.select()
指定列查询,对数据列使用公式
columns = [ 'col_a', pf.Max('col_b'), t.col_c, t.col_d + 25, pf.Avg(t.col_e) ] tbl.select(columns)
将执行sql:
SELECT `col_a`, MAX('col_b'), `col_c`, `col_d`+ 25, AVG(`col_e`) FROM `example`
指定查询条件
where = ( ((t.col_a > 1) | (t.col_b == '23')) & (t.col_c.isin([1, 2, 3]) | t.col_d.like('f%')) ) tbl.select(where=where)
将执行sql:
SELECT * FROM `example` WHERE (`col_a`>1 OR `col_b`= '23') AND (`col_c` IN (1, 2, 3) OR `col_d` LIKE 'f%')
聚合条件等
tbl.select( [pf.Max('col_a')], groupby=[t.col_c], limit=10, offset=5, )
将执行sql:
SELECT MAX('col_a') FROM `example` GROUP BY `col_c` LIMIT 10 OFFSET 5
警告
虽然目前参数where可以接收str类型,但这种支持会在将来被移除。 因为这会导致最终执行SQL:
"SELECT {distinct} {fields} FROM {table_name} WHERE {where}"
即groupby,limit等参数都将失效,虽然可以写在where条件中, 但这种方式会使你的代码可读性下降,因此并不被推荐。 请务必按照示例中的写法使用本方法,否则您可能在代码中看到一些 warning甚至在将来无法使用。
参见
如果希望返回
DataFrame
的数据,可以使用select