select_raw

async AsyncDataTableOracle.select_raw(columns=None, where=None, distinct=False, groupby=None, having=None, orderby=None, order=Order.asc, limit=None, offset=None)

根据查询条件从数据表获取数据

根据查询条件查询数据表接口并返回。 数据类型将只含有 JSON基本数据类型

参数

示例

import pypika.functions as pf
tbl = DataTableMySQL("example")
t = tbl.table
  1. 执行全表查询

    tbl.select()
    
  2. 指定列查询,对数据列使用公式

    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`
    
  3. 指定查询条件

    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%')
    
  4. 聚合条件等

    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

返回类型

List[dict]

返回

形如 [{column -> value}, … , {column -> value}] 的数据。

例如原始数据为

col1

col2

1

2

3

4

则返回 [{'col1': 1, 'col2': 2}, {'col1': 3, 'col2': 4}]