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

在这个实体经济都开始数字驱动的时代,股市韭菜也得与时俱进,不能停留在拍脑袋决定买或卖的时点上。本文用于记录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()

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享