【老博客地址】

  【CSDN】博客主页
  【量化投资】00.资源篇——持续更新
  【量化投资】01.基本概念
  【量化投资】02.数据接口初探——excel读取新浪股票api数据
    【量化投资】03.量化工程abu学习之量化基础(1/3)

【目标】

  接上文,将【量化投资】04.使用python爬取股票基础数据中爬取的数据保存到mysql数据库中

【最终效果】

【准备工作】

  • 安装mysql数据库(本地或docker方式都可以)
  • 安装python操作mysql所需要的包
    • pip install pymysql
  • (选)安装Navicat客户端,用以查询数据库

【创建mysql数据库表】

1
CREATE TABLE ts_stock_basics(code varchar(255) COMMENT '代码',name varchar(255) COMMENT '名称',industry varchar(255) COMMENT '所属行业',area varchar(255) COMMENT '地区',pe varchar(255) COMMENT '市盈率',outstanding varchar(255) COMMENT '流通股本(亿)',totals varchar(255) COMMENT '总股本(亿)',totalAssets varchar(255) COMMENT '总资产(万)',liquidAssets varchar(255) COMMENT '流动资产',fixedAssets varchar(255) COMMENT '固定资产',reserved varchar(255) COMMENT '公积金',reservedPerShare varchar(255) COMMENT '每股公积金',esp varchar(255) COMMENT '每股收益',bvps varchar(255) COMMENT '每股净资',pb varchar(255) COMMENT '市净率',timeToMarket varchar(255) COMMENT '上市日期',undp varchar(255) COMMENT '未分利润',perundp varchar(255) COMMENT '每股未分配',rev varchar(255) COMMENT '收入同比(%)',profit varchar(255) COMMENT '利润同比(%)',gpr varchar(255) COMMENT '毛利率(%)',npr varchar(255) COMMENT '净利润率(%)',holders varchar(255) COMMENT '股东人数',PRIMARY KEY (code) ) COMMENT='股票列表';

【完整代码:读取csv文件,并插入到数据库】

【重要】需要更改自己的数据库地址、用户名和密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import pymysql
import csv

MYSQL_HOST='127.0.0.1'
MYSQL_USER='root'
MYSQL_PWD='mariadb'
MYSQL_DB='stock_data'

# 建立数据连接
def conn():
db = pymysql.connect(MYSQL_HOST, MYSQL_USER, MYSQL_PWD, MYSQL_DB, port=3306, charset="utf8")
return db

# 插入数据
def insertTSB():

# 读取csv文件
file = open('stock_info.csv',encoding='utf-8')
fileReader = csv.reader(file)
filedata = list(fileReader)
db = conn()
c = db.cursor()

# 有些为空的数据,csv自动变为-, 需要处理掉, 否则插入数据库会报错
for row in filedata:
for _ in range(len(row)):
if row[_] == '-':
row[_]='\'\''

for i,val in enumerate(filedata):
if i==0: # 跳过文件头
continue
# 组装插入语句
# 股票代码 股票名称 行业 地区 pe 流通股本 总股本 总资产 流动资产 上市时间 每股未分配利润 利润同比 净利润率
sql = "INSERT INTO ts_stock_basics(code, name, industry, area, pe, \
outstanding, totals, totalAssets, liquidAssets, timeToMarket, perundp, profit, npr) \
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s )" % \
(str(val[0]).zfill(6), '\''+val[1]+'\'', '\''+val[20]+'\'', '\''+val[21]+'\'', val[22], val[15], val[14], val[18], val[19], val[29], val[30], val[26], val[27])

try:
# 执行语句
c.execute(sql)
# 提交
db.commit()
except:
# 如果出错,把错误语句打印出来,方便分析
print(sql)
# 如果出错需要回滚
db.rollback()
# 一定不要忘了关闭数据库连接
db.close()

# 删除所有数据
def deleteTSB():
db = conn()
# 使用cursor()方法获取操作游标
cursor = db.cursor()

# SQL 删除语句
sql = "DELETE FROM ts_stock_basics WHERE 1=1 "
try:
# 执行SQL语句
cursor.execute(sql)
# 提交修改
db.commit()
except:
# 发生错误时回滚
db.rollback()

# 关闭连接
db.close()

#deleteTSB() # 如果需要重新插入,用此方法删除数据库表内容
insertTSB()