VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 173
声望: 32

最近在看文档的数据库部分,碰见了很多的数据库类型,干脆把各个数据库的配置记录一下,了解一下vnpy的数据库部分结构。
本文涉及的数据库包括MySQL,SQLite,MongoDB,(PostgreSQL就不写了,和MySQL差不多)。
第一次发长文,排版不好或是认知有偏差敬请指出。本人也算小白,仅当记录自己的心得了。

Vnpy的database

 
database模块一般用于CsvLoader模块中的数据持久化(导入)和CtaBacktester模块中的数据导出,在这两个模块中,database这个module是以BaseDatabaseManager类对象出现的,并且会直接调用这个类对象的导入导出方法。下面概括下这个类对象是如何生成的。
 
description
上图是database简略框架图。
 
在导入database这个module的时候,可以分成三层结构

  • 自动运行init.py文件,读取.vntrader/vt_setting.json中的数据库配置信息(也就是GUI界面点击菜单栏中”配置“出现的那个),然后调用.initialize中的init方法。
  • 在settings中保存着数据库driver类型,根据不同的类型又调用同一文件中的init_sql或者init_nosql。以init_sql为例,函数内部从database_sql.py中调用真正的init函数。目前为止并没有实质的内容,只是不断的在分层选择调用不同的函数。
  • 接下来以sqlite为例,并且会涉及peewee包。
     
    peewee包的作用我理解是,用统一的形式对sql数据库进行管理,开放上层接口给用户使用。(有误请指出,谢谢)
    在peewee中,一个model类对象视为一张表,相应类实例可以视为一条记录(row),一个field实例可以视为一列。先使用peewee提供的数据库引擎类实例化,建立与数据文件的连接,然后定义一个model类用于表示表,最后将model类添加到数据库引擎类(即生成数据表)。此时,db即可表示一个与数据文件连接着的数据引擎实例,上面添加到db的model类即可以表示db中的一张张表,可以取出来继续单独使用(原理是在定义model类时,使用了class meta吧我猜)
     
    那么在database_sql.py中,整个逻辑过程就是:在init中调用peewee的Database Engine(SQLiteDatabase)生成实例表示与db文件建立连接,将该实例对象称为db。调用init_models函数生成model类同时将model类添加到db中,然后将两张表返回(DbTickData和DBBarData)。最后,将这两张表(类)添加到SqlManager中,生成统一的BaseDatabaseManager,并提供给外界调用。
    大概逻辑图长这样:
    description
     
     

数据库配置

上面大致介绍了BaseDataManager的生成过程,现在介绍不同数据库具体使用时候setting如何填写。

  • #### Sqlite
    Sqlite是vnpy默认的数据库,配置不用特意去改,同时,Sqlite的数据库文件在.vntrader\\vt_setting.json中(以"database."为前缀的那几个)。
    
    额外注:在内部运行过程中,其实只用到了database.database这条配置,它的值也就是数据库文件的名字。其余都没有用到(不需要)
  • #### MySQL
    MySQL使用到的配置信息包括:database,user,password,host,port。
    
    peewee在连接本地mysql数据库时,实际调用的是MySQLdb或者是pymysql包。实际必须的只有数据库名称,用户和密码,后面两个都是默认有的(pymysql)
    使用MySQL除此之外还需特别注意,peewee不能为本地创建不存在的database,这意味着需要使用vnpy+MySQL的用户需要自己额外创建一个database,假如是”vnpyDb”,那么在配置栏就写vnpyDb"。
  • #### MongoDB
     后续补上,写太长了
Administrator
avatar
加入于:
帖子: 4500
声望: 320

这个思维导图太好了,基本一眼看清楚数据库模块的内部关系

Member
加入于:
帖子: 22
声望: 1

好文,学习

Member
avatar
加入于:
帖子: 21
声望: 1

太好了,帮助理解

Member
avatar
加入于:
帖子: 50
声望: 12

本来想发一篇数据库部分的,没想到已有兄弟发了,赞一个!

Member
avatar
加入于:
帖子: 3
声望: 0

正好需要mongodb的。。 就断了。。。

Member
avatar
加入于:
帖子: 3
声望: 0

这个是1.9.2 的吧。有2.0的么

Member
avatar
加入于:
帖子: 173
声望: 32

付益明 wrote:

这个是1.9.2 的吧。有2.0的么
这个是2.0的,mongodb你先看文档那,有些,如果看不懂我今天补发一下

Member
avatar
加入于:
帖子: 14
声望: 0

方里明 wrote:

最近在看文档的数据库部分,碰见了很多的数据库类型,干脆把各个数据库的配置记录一下,了解一下vnpy的数据库部分结构。
本文涉及的数据库包括MySQL,SQLite,MongoDB,(PostgreSQL就不写了,和MySQL差不多)。
第一次发长文,排版不好或是认知有偏差敬请指出。本人也算小白,仅当记录自己的心得了。

Vnpy的database

 
database模块一般用于CsvLoader模块中的数据持久化(导入)和CtaBacktester模块中的数据导出,在这两个模块中,database这个module是以BaseDatabaseManager类对象出现的,并且会直接调用这个类对象的导入导出方法。下面概括下这个类对象是如何生成的。
 
description
上图是database简略框架图。
 
在导入database这个module的时候,可以分成三层结构

  • 自动运行init.py文件,读取.vntrader/vt_setting.json中的数据库配置信息(也就是GUI界面点击菜单栏中”配置“出现的那个),然后调用.initialize中的init方法。
  • 在settings中保存着数据库driver类型,根据不同的类型又调用同一文件中的init_sql或者init_nosql。以init_sql为例,函数内部从database_sql.py中调用真正的init函数。目前为止并没有实质的内容,只是不断的在分层选择调用不同的函数。
  • 接下来以sqlite为例,并且会涉及peewee包。
     
    peewee包的作用我理解是,用统一的形式对sql数据库进行管理,开放上层接口给用户使用。(有误请指出,谢谢)
    在peewee中,一个model类对象视为一张表,相应类实例可以视为一条记录(row),一个field实例可以视为一列。先使用peewee提供的数据库引擎类实例化,建立与数据文件的连接,然后定义一个model类用于表示表,最后将model类添加到数据库引擎类(即生成数据表)。此时,db即可表示一个与数据文件连接着的数据引擎实例,上面添加到db的model类即可以表示db中的一张张表,可以取出来继续单独使用(原理是在定义model类时,使用了class meta吧我猜)
     
    那么在database_sql.py中,整个逻辑过程就是:在init中调用peewee的Database Engine(SQLiteDatabase)生成实例表示与db文件建立连接,将该实例对象称为db。调用init_models函数生成model类同时将model类添加到db中,然后将两张表返回(DbTickData和DBBarData)。最后,将这两张表(类)添加到SqlManager中,生成统一的BaseDatabaseManager,并提供给外界调用。
    大概逻辑图长这样:
    description
     
     

数据库配置

上面大致介绍了BaseDataManager的生成过程,现在介绍不同数据库具体使用时候setting如何填写。

  • #### Sqlite
    Sqlite是vnpy默认的数据库,配置不用特意去改,同时,Sqlite的数据库文件在.vntrader\\vt_setting.json中(以"database."为前缀的那几个)。
    
    额外注:在内部运行过程中,其实只用到了database.database这条配置,它的值也就是数据库文件的名字。其余都没有用到(不需要)
  • #### MySQL
    MySQL使用到的配置信息包括:database,user,password,host,port。
    
    peewee在连接本地mysql数据库时,实际调用的是MySQLdb或者是pymysql包。实际必须的只有数据库名称,用户和密码,后面两个都是默认有的(pymysql)
    使用MySQL除此之外还需特别注意,peewee不能为本地创建不存在的database,这意味着需要使用vnpy+MySQL的用户需要自己额外创建一个database,假如是”vnpyDb”,那么在配置栏就写vnpyDb"。
  • #### MongoDB
     后续补上,写太长了
Member
avatar
加入于:
帖子: 14
声望: 0

mongoDB的配置教程大神写一下吧

Member
avatar
加入于:
帖子: 2
声望: 0

谢谢分享

Member
avatar
加入于:
帖子: 8
声望: 0

楼主,能分享一下思维图吗?

Member
avatar
加入于:
帖子: 173
声望: 32

王绪华 wrote:

楼主,能分享一下思维图吗?
怎么给

Member
avatar
加入于:
帖子: 12
声望: 1

方里明 wrote:

王绪华 wrote:

楼主,能分享一下思维图吗?
怎么给

正好在配置数据库就发现楼主此文,太感谢了。
思维导图方便的话也请给我发一份,谢谢!
10534732@qq.com

Member
avatar
加入于:
帖子: 13
声望: 0

楼主能写个怎么导数据进MYSQL的教程吗 vnpy网站下的内盘期货数据导不进数据库, 小白一个哈

Member
avatar
加入于:
帖子: 173
声望: 32

卓允 wrote:

楼主能写个怎么导数据进MYSQL的教程吗 vnpy网站下的内盘期货数据导不进数据库, 小白一个哈
你是指不会将默认数据库修改成MYSQL还是不会csvloader呢

Member
avatar
加入于:
帖子: 50
声望: 1

我记得在别的地方看到过含mongodb内容的更完整的楼主的贴子,好像是csdn上?记不清了,也找不到了,还望楼主能把mongodb的内容也补齐哈。

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】