聚宽平台实际上提供了两种查询数据的方法,第一种是线上在聚宽平台可以使用的API:jqdata,另外一种则是本地的接口:JQData,是的,你没有看错,只是大小写的不同,搞得一开始我以为完全是同一种。jqdata可以线上通过import jqdata
来引入数据接口,本地的JQData则是通过import jqdatasdk
来引入。两种数据源唯一的不同就是jqdata对接了聚源数据(一个更高阶的数据源)而JQData没有。本文就来介绍一下聚源数据端口以及其他需要数据库操作的查询方法。
文章目录
SQLAlchemy
在介绍聚源接口之前,我们有必要了解一下SQLAlchemy,聚源数据的提取就是基于SQLAlchemy进行的。
SQL,即*(Structured Query Language 结构化查询语言)*是一种声明式的语言,是关系型数据库的通用语言。SQL查询是客户端发送给数据库服务器的文本字符串,指明需要执行的具体操作。SQL十分有用,是一个数据分析师必备的技能,关于SQL以及数据库相关的知识要深究的话其实很多,几本书都写不完,在此我不做深入介绍,以后有时间我会写相关的文章总结。
回到SQLAlchemy。对于所有的关系型数据库而言,SQL是不完全相同的,每一种是数据库实现的是包含自己特征和哲学的方言。许多函数库用于消除它们之间的差异,其中最著名的跨数据库的Python库是SQLAlchemy。
以下层级是可以使用SQLAlchemy的:
- 底层负责处理数据库连接池,执行SQL命令以及返回结果。
- 往上是SQL表达式语言,更像Python的SQL生成器
- 较高级的是对象关系模型(ORM),使用SQL表达式语言,将应用程序代码和关系型数据结构结合起来。
在创建会话后,可以通过SQLAlchemy的query对象来进行查询:q = session.query(SomeMappedClass)
其中聚宽涉及到SQLAlchemy的基本的查询方式有:
- query 填写需要查询的对象,可以是整张表,也可以是表中的多个字段或计算出的结果
- filter 填写过滤条件,多个过滤条件可以用逗号隔开,或者用and*,or*这样的语法
- order_by 填写排序条件
- .desc() 降序排列
- .asc() 升序排列
- limit 限制返回的个数
- order_by 排序条件
聚源数据的引入
以下两条语句都会引入数据库的查询操作
from jqdata import jy
from jqdata import finance
涉及使用数据库的操作有:
- get_fundamentals (股票单季度财务数据)
- finance (股票数据,基金数据等)
- opt (期权数据)
- macro (宏观数据)
- jy (聚源数据)
获取融资融券汇总数据
finance.run_query(
query(finance.STK_MT_TOTAL)
.filter(finance.STK_MT_TOTAL.date=='2019-05-23')
.limit(n))
数据表finance.STK_MT_TOTAL:收录了融资融券汇总数据
表结构和字段信息如下:
名称 | 类型 | 描述 |
---|---|---|
date | date | 交易日期 |
exchange_code | varchar(12) | 交易市场 |
fin_value | decimal(20,2) | 融资余额(元) |
fin_buy_value | decimal(20,2) | 融资买入额(元) |
sec_volume | int | 融券余量(股) |
sec_value | decimal(20,2) | 融券余量金额(元) |
sec_sell_volume | int | 融券卖出量(股) |
fin_sec_value | decimal(20,2) | 融资融券余额(元) |
获取股票资金流向数据
get_money_flow(security_list, start_date=None, end_date=None, fields=None, count=None)
补充&