Appearance
智量通数据库
查表
query-查表 通过结构化查询方式获取上市公司三大财务报表(资产负债表、利润表、现金流量表)及分红表数据,三大报表字段名称与get_fundamentals函数保持一致。
重要说明
- 使用财务数据前,需确保已下载对应权限(专业/核心)、对应时间范围的财务数据;
- 查询财务字段时,需提前导入对应的查询函数、表名及连表方法;
- 不同类型表的查询函数及表名对应关系:
| 查询函数 | 表名 | 表介绍 |
|---|---|---|
| co_session | CoFinancialRecordBS | 核心资产负债表 |
| co_session | CoFinancialRecordISCF | 核心现金流量表 & 利润表 |
| pr_session | PrFinanceRecordBs | 专业资产负债表 |
| pr_session | PrFinanceRecordCf | 专业现金流量表 |
| pr_session | PrFinanceRecordIs | 专业利润表 |
| xrxd_session | STK_XR_XD | 分红表 |
- 条件筛选需导入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()