Package: qytools
📦 qytools文件内容db_read.py数据库取出数据db_maintain.py数据库录入数据tools.py数据库/因子构造相关实用工具包stack.py堆栈前言操作中财量化研究院所拥有的全部sqlite3数据库，具体操作见下面相关文件描述比常规select语句速度高出数倍~数十倍，数据量越大提升速度越明显仅供中财量化研究院成员学习使用dbread采取内置文档的形式，对接口使用有疑问可以直接参考README+内置文档作者qytools©yulin qiu, Released under theMITLicense.qq: 492876854Weixin: QQ492876854e-mail:x492876854@qq.com环境准备pipreqs==0.4.10pandas>=1.0.1numpy>=1.16.2tushare>=1.2.52使用准备dbread接口功能需要使用tushare，需要确保本机拥有tushare包并且已经执行过set_token尽量确保tushare拥有200以上积分，或者入tushare官方群联系管理员学生可以拥有免费使用权限首次使用tushare需要根据官网指示设置token200以上积分，或者入tushare官方群联系管理员否则qytools部分功能无法使用，之后全局有效，无需设置文件文档db_read.py基于股票sqlite数据库的通用型接口class: DbReader，使用流程from qyltools import Dbreader首次使用时预先执行一次，执行成功后略过，进行步骤3（类似tushare set_token）：Dbreader.firsttime_setconfig(sqlite3数据文件存放目录)例如：Dbreader.firsttime_setconfig(r'D:\learn\navicat\data'）read = Dbreaderread.read_ts_day_data(参数)主要拥有以下功能读取数据类read_tdx_1min_data获取分钟数据read_ts_top_inst获取龙虎榜机构明细read_ts_top_list获取龙虎榜股票明细read_ts_day_data获取日线综合数据read_ts_index_daily获取指数日线数据read_ts_limit_list获取每日涨停板数据read_ts_moneyflow_hsgt获取沪深港通资金流数据read_concept_data获取板块信息read_jj_1min_index_data获取指数分钟数据（掘金数据源）read_fundamentals获取股票公司财务数据read_strategy获取AI策略因子表read_cal_market_1min_data获取计算因子表query_stock_day通用型股票日线数据表接口query_stock_min通用型股票分钟数据表接口query_index_day通用型指数日线数据表接口query_index_min通用型指数分钟数据表接口query_market_min通用型市场分钟数据表接口query_market_day通用型市场日线数据表接口query_stock_limitday获取股票指定时间长度的日线数据接口（处理停牌股专用）主要参数说明start– 开始日期，必选，支持int(20180808), datetime('2018-08-08 00:00:00'), str('20180808')end– 结束日期 ，必选，支持同startfields– 要从库中取出的列名,默认取所有，支持str和list[str]，例如'code,high', ['code','high']code– 代码，默认取所有，支持int如300, list如[1, '300', 399905]列表内可以是数值或strshift– 往前推的时间，默认0，仅支持intforward– 往后推的时间，默认0，仅支持intnewdrop– 新股上市多少交易日内不交易，默认0，仅支持intstdrop– 是否剔除st股，True剔除，默认Truedeldrop– 是否剔除退市股，True剔除，默认Falsestardrop– 是否剔除科创板股，True剔除，默认Truetime_start– 分钟数据的可选参数，开始时间，默认None，支持str如'09:35:30'time_end– 分钟数据的可选参数，结束时间，默认None，支持str如'09:35:30'tablename– 查询表名，str类型dbname– 数据库名，str类型，后缀可加可不加，如test或test.sqlite3均合法返回值为dataframe格式数据表.示例1：[In]: read.read_ts_day_data(start='20200313', end=20200313, forward=1, shift=1, newdrop=60)  # 参数见文档（ctrl+Q）
  
  [Out]:
              id             code         date  ...   up_limit    vol     volume_ratio
              10575  1753771  603998  2020-03-13  ...      7.67   59193.06          1.01
              10576  1757673  603998  2020-03-16  ...      7.45   65566.00          1.11
              10577  1751490  603999  2020-03-12  ...      7.12   94223.01          1.06
              10578  1755746  603999  2020-03-13  ...      6.89  112777.40          1.29
              10579  1756595  603999  2020-03-16  ...      6.64   83763.32          0.89
              [5 rows x 42 columns]示例2：[In]: query_index_min(start=20200402, end=20200402, tablename='jj_1min_index_data', dbname='jj_data')
  
  [Out]: 
          code        date  ...      volume             datetime
  1915  399006  2020-04-02  ...  17922320.0  2020-04-02 14:56:00
  1916  399006  2020-04-02  ...  16854299.0  2020-04-02 14:57:00
  1917  399006  2020-04-02  ...   1227189.0  2020-04-02 14:58:00
  1918  399006  2020-04-02  ...         0.0  2020-04-02 14:59:00
  1919  399006  2020-04-02  ...  33783690.0  2020-04-02 15:00:00
  [5 rows x 10 columns]工具箱get_tableinfo_cols获取某个数据库某个表的所有列名check_time修正时间格式，输入strintdatetime统一变为str: '2018-09-08'型get_timesection获取指定起止日期的交易日历示例1：[In]: read.get_timesection(start='20200313', end=20200315, shift=5)  # shift为参数，取前n交易日  
 
  [Out]:  
  ['2020-03-06', '2020-03-09', '2020-03-10', '2020-03-11', '2020-03-12', '2020-03-13']get_opendate查找指定时间附近的交易日示例2：[In]: read.get_opendate(time=20200315, shift=1)  # shift为参数，取前n交易日`
  
  [Out]:
  `2020-03-13db_maintain.py注意事项使用db_maintain.py只需要了解最基础的sql语法含义即可使用，如有疑问，参考sql语法文档接口db_maintain.py文件里均有主要功能的详细参数说明，可以通过main里的示例，对上述4个功能ctrl+鼠标左键或Ctrl+Q查看基本功能包括4个:update_datareplace_datarebuild_datainsert_data下面逐一介绍update_data此接口掌管数据更新，与sql中的update含义类似，将原来表的某些已有数据更新，比如将test表中2018年10月15日到16日的volume改变为输入df中的对应值，相比sql语句的update，直接额外添加列，以及自动裁剪重复数据示例：factor.update_data(
        dbpath='D/fundamentals.sqlite3', tablename='test',
        newcols={'circ_mv': 'real'}, df_data=df, index_col='code,date', autoadd=True)上述代码基本含义为：在D盘更新fundamental数据库中的test表，新增一列circ_mv且定义格式为real，
传入的dataframe为df，test表的索引为code,date，autoadd打开则剩余未像circ_mv定义为real的额外列
（df有而数据库没有的列）将按照sqlite默认格式入库使用场景：某段时间区间的某几列数据有问题，重新入库对应几列时使用replace_data此接口掌管数据表完全替换，谨慎使用，使用后原表会删除，操作和update大体一致，额外多参数index_name，为替换后新表的创建的索引名称如'index_b1'使用场景：整个表过于老旧或出于其他原因要整表替换时使用rebuild_data此接口掌管已有数据的替换，相对于replace更为温和，相对于update更为激进，是在原表基础上修改一部分数据，但是是按照时间区间，起始时间到终止时间的所有数据会被清空后重新写入，不能指定某一列，操作方法同update使用场景：某段时间区间的数据整体性入错，重新入库时使用insert_data此接口掌管数据插入，与sql中的insert含义类似，但是相比sql语句，该接口可以额外添加列，以及自动裁剪和库里重复数据，操作方式与update基本一致,额外多了insertmode参数，详细解释见db_maintain使用场景：添加新数据，每日更新数据库等creat_dbtable此接口掌管建库建表或者在已存在的库里建表，详细解释见db_maintain使用场景：新建了数据库或者因子表，用于他人使用时无库建库，无表建表，使得使用者完全不需要掌握数据库操作即可完成相关需求LicenseThis is free and unencumbered software released into the public domain.Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any means.