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

举报
darkpard 发表于 2022/03/20 11:31:00 2022/03/20
【摘要】 在这个实体经济都开始数字驱动的时代,股市韭菜也得与时俱进,不能停留在拍脑袋决定买或卖的时点上。本文用于记录0-1给自己搭一个金融数据库的过程。2. 将本地数据存入到mysql数据库2.1. python连接到mysql2.1.1. 安装包首先安装python连接mysql数据库的包pymysqlpip install pymysql2.1.2. 连接mysql然后进入Python,如果用ju...

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

2. 将本地数据存入到mysql数据库

2.1. python连接到mysql

2.1.1. 安装包

首先安装python连接mysql数据库的包pymysql

pip install pymysql

2.1.2. 连接mysql

然后进入Python,如果用jupyter notebook或其他的IDE应该会更加方便。因为我对Python比较熟悉,所以这里直接用命令操作。

先导入包

import pymysql

然后连接到自己的mysql

conn = pymysql.connect(host='localhost', user='root', password='y;r,ken2Rl;m', port=3306, database='stock', charset='utf8')

注意这里的host,如果可远程访问,可以通过IP来访问。

再然后生成一个游标对象

cur = conn.cursor()

接下来就可以愉快地操作数据库了。

2.2. 建表

先建一个买卖计划表,用于存放自己的买卖计划

sql = "create table plan(id int primary key not null auto_increment, ts_code varchar(10) not null, direction varchar(1) not null, price decimal not null, num int not null)"
cur.execute(sql)
conn.commit()

plan表创建成功了,我们可以用命令看一下。

sql = "show tables"
cur.execute(sql)
cur.fetchall()

图片

如果考虑得不够周到,还可以给新建的表增加列

sql = "alter table plan add strategy int"
cur.execute(sql)
conn.commit()

2.3. 读取本地(文件)数据表

import pandas as pd
data = pd.read_csv('/root/s_dash/data/plan9.csv', encoding='gbk')

可以看到本地数据已经读取成功了

图片

2.4. 将本地(文件)数据写入mysql


>>> for i in data.index:
...     sql = "insert into plan(strategy, date, ts_code, direction, price, num) values(9, %s, '%s', '%s', %f, '%s')"
...     if data.loc[i, '买/卖'] == '买':
...             direction = 'b'
...     else:
...             direction = 's'
...     sql = sql % (data.loc[i, '日期'], data.loc[i, '代码'], direction, data.loc[i, '价格'], data.loc[i, '数量'])
...     cur.execute(sql)
...     conn.commit()

注意,由于我建表时买卖方向的字段用的是varchar(1),所以这里的中文“买”或“卖”要转为'b'或's'来写入数据库。

2.5. 将本地文件批量写入到数据库

先删除刚刚写入的数据

>>> sql = "delete from plan"
>>> cur.execute(sql)
117
>>> conn.commit()

打开文件夹,获得文件夹下的所有文件的生成器对象

>>> import os
>>> files = os.listdir('/root/s_dash/data')

将每个文件写入到数据表中

>>> for file in files:
...     if file.startswith('plan'):
...             strategy = file.split('.')[0][4:]
...             data = pd.read_csv('/root/s_dash/data/'+file, encoding='gbk')
...             for i in data.index:
...                     sql = "insert into plan(strategy, date, ts_code, direction, price, num) values(9, %s, '%s', '%s', %f, '%s')"
...                     if data.loc[i, '买/卖'] == '买':
...                             direction = 'b'
...                     else:
...                             direction = 's'
...                     sql = sql % (data.loc[i, '日期'], data.loc[i, '代码'], direction, data.loc[i, '价格'], data.loc[i, '数量'])
...                     cur.execute(sql)
...                     conn.commit()

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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