Skip to content

智量通数据库 ​

查表 ​

query-查表 通过结构化查询方式获取上市公司三大财务报表(资产负债表、利润表、现金流量表)及分红表数据,三大报表字段名称与get_fundamentals函数保持一致。

重要说明 ​

  1. 使用财务数据前,需确保已下载对应权限(专业/核心)、对应时间范围的财务数据;
  2. 查询财务字段时,需提前导入对应的查询函数、表名及连表方法;
  3. 不同类型表的查询函数及表名对应关系:
查询函数表名表介绍
co_sessionCoFinancialRecordBS核心资产负债表
co_sessionCoFinancialRecordISCF核心现金流量表 & 利润表
pr_sessionPrFinanceRecordBs专业资产负债表
pr_sessionPrFinanceRecordCf专业现金流量表
pr_sessionPrFinanceRecordIs专业利润表
xrxd_sessionSTK_XR_XD分红表
  1. 条件筛选需导入sqlalchemy库的and_、or_、not_方法。

函数原型 ​

python
from zltquant.zltlib.finance import run_query
# 构建查询语句
query = 会话对象.query(字段1, 字段2...).join(...).filter(...).order_by(...)
# 执行查询
result_df = run_query(query)

参数详情 ​

参数名类型必选含义与取值说明
会话对象object是不同权限的查询会话,可选值:co_session(核心权限)、pr_session(专业权限)、xrxd_session(分红表)
字段object是需查询的表字段,格式为表名.字段名,例如CoFinancialRecordBS.bs_cash
join条件and_/or_组合否多表关联时的匹配条件,需匹配sec_code、ann_date、rpt_period等关键字段
filter条件比较表达式否筛选条件,例如rpt_period > 202203,支持>、<、==等运算符
order_by字段object否排序字段,例如CoFinancialRecordBS.bs_cash,默认升序

返回值 ​

返回数据类型为DataFrame,核心字段包含sec_code(股票代码)、ann_date(发布日期)、rpt_period(报告期)及各类财务指标字段;无匹配数据时返回空的DataFrame,不会抛出异常。

完整示例 ​

python
# 导入必要库和函数
from zltquant.zltlib.finance import run_query, co_session, CoFinancialRecordBS, CoFinancialRecordISCF
from zltquant import *
from sqlalchemy import and_, or_, not_

def initialize(context): 
    # 构建查询语句:关联核心资产负债表和核心现金流量&利润表
    query = (
        co_session.query(
            # 选择需要查询的字段
            CoFinancialRecordBS.sec_code,          # 股票代码
            CoFinancialRecordBS.ann_date,          # 发布日期
            CoFinancialRecordBS.rpt_period,        # 报告期
            CoFinancialRecordBS.bs_cash,           # 货币资金
            CoFinancialRecordISCF.cf_asset_impairment,  # 资产减值准备
        )
        # 关联两张表(按股票代码、发布日期、报告期匹配)
        .join(
            CoFinancialRecordISCF,
            and_(
                CoFinancialRecordBS.sec_code == CoFinancialRecordISCF.sec_code,
                CoFinancialRecordBS.ann_date == CoFinancialRecordISCF.ann_date,
                CoFinancialRecordBS.rpt_period == CoFinancialRecordISCF.rpt_period,
            ),
        )
        # 筛选报告期范围(2022年一季度 至 2023年一季度)
        .filter(
            CoFinancialRecordBS.rpt_period > 202203,
            CoFinancialRecordBS.rpt_period < 202303,
        )
        # 按货币资金字段升序排序
        .order_by(CoFinancialRecordBS.bs_cash)
    )
    # 执行查询并打印结果
    result_df = run_query(query)
    log.info(result_df)
    # 输出样例:
    #      sec_code    ann_date  rpt_period      bs_cash  cf_asset_impairment
    # 0     sz000001  2022-04-30    202206    1000000000.0           50000000.0
    # 1     sz000002  2022-08-30    202209    2500000000.0           80000000.0

def handle_data(context, data): 
    pass

if __name__ == "__main__": 
    run_main()

多标的查询示例 ​

python
# 导入必要库和函数
from zltquant.zltlib.finance import run_query, xrxd_session, STK_XR_XD
from zltquant import *
from sqlalchemy import and_

def initialize(context): 
    # 构建查询语句:查询多只股票的分红数据
    query = (
        xrxd_session.query(
            STK_XR_XD.sec_code,          # 股票代码
            STK_XR_XD.report_date,       # 分红报告期
            STK_XR_XD.bonus_ratio_rmb,   # 派息比例(人民币)
            STK_XR_XD.a_registration_date # A股股权登记日
        )
        # 筛选指定股票和报告期
        .filter(
            STK_XR_XD.sec_code.in_(['sz000001', 'sh600000']),  # 多标的筛选
            STK_XR_XD.report_date == '2023-12-31'                # 年报数据
        )
    )
    # 执行查询并打印结果
    result_df = run_query(query)
    log.info(result_df)
    # 输出样例:
    #      sec_code report_date  bonus_ratio_rmb a_registration_date
    # 0     sz000001  2023-12-31              1.5         2024-06-10
    # 1     sh600000  2023-12-31              3.0         2024-06-15

def handle_data(context, data): 
    pass

if __name__ == "__main__": 
    run_main()