给自己搭一个金融数据库(三)

举报
darkpard 发表于 2022/04/03 21:55:09 2022/04/03
【摘要】 在这个实体经济都开始数字驱动的时代,股市韭菜也得与时俱进,不能停留在拍脑袋决定买或卖的时点上。本文用于记录0-1给自己搭一个金融数据库的过程。3. 数据库定时更新3.1. 追加式更新我们以上证指数收盘价为例,来演示一下数据库追加式的定时更新,并尝试用一种新方法来做演示。3.1.1. 查看数据格式首先来看一下数据表的格式。show columns from SSEC;3.1.2. 获取数据我们...

在这个实体经济都开始数字驱动的时代,股市韭菜也得与时俱进,不能停留在拍脑袋决定买或卖的时点上。本文用于记录0-1给自己搭一个金融数据库的过程。

3. 数据库定时更新

3.1. 追加式更新

我们以上证指数收盘价为例,来演示一下数据库追加式的定时更新,并尝试用一种新方法来做演示。

3.1.1. 查看数据格式

首先来看一下数据表的格式。

show columns from SSEC;

图片

3.1.2. 获取数据

我们从tushare获取新的数据(热点复现|用Dash做A股量化策略可视也曾提到过tushare)。

import tushare as ts
pro = ts.pro_api('your token')
import datetime
new_SSEC = pro.index_daily(ts_code='000001.SH', trade_date=datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d'))[['trade_date', 'close']]
new_SSEC

图片

3.1.3. 连接mysql并将数据插入数据库

这里我们使用sqlalchemy,通过pandas的DataFrame来实现插入。

from sqlalchemy import create_engine
engine=create_engine('mysql+pymysql://root:password@host:port/database')

root、password、host、port、database处请替换成自己的数据库设置,可参见给自己搭一个金融数据库(一)或留言交流。

new_SSEC.to_sql('SSEC', engine, index=False, if_exists='append')

注意必须记得加上if_exists='append'。加了这个参数后,如果数据表已经存在,则在原记录上增加。默认的参数下,如果数据表已经存在,将会删除后重新建表。

再去查一下数据库,可以看到插入已经成功了。

图片

3.2. 修改式更新

也有可能有些表不是插入新的记录,而是理发原记录。

比如我有一个表,表结构如下:

图片

它是用来记录每一次买卖的,卖出可能不是跟买入一起记录的,而是后期再去更新的,那个需要用到update,与给自己搭一个金融数据库(二)介绍的insert非常相似。

3.2.1. 连接数据库

import pymysql
import pymysql
conn = pymysql.connect(host='host', user='root', password='password', port=3306, database='stock', charset='utf8')
cur = conn.cursor()

3.2.2. 修改数据库


>>> for i in hold_detail.index:
...     sql = "update hold_detail set sale_date=%s, sale_price=%f where id=%d" % (hold_detail['sale_date'][i], hold_detail['sale_price'][i], hold_detail['id'][i])
...     cur.execute(sql)
...     conn.commit()



如此,自己的金融数据库搭建完毕。当然,如何用起来才是关键,有机会再做记录。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。