写入前准备
1.window电脑提前安装好MySQL
2.知道自己MySQL的密码和用户名
3.提前建好要写入的数据库和数据表
1.首先测试写入一条数据进去MySQL在尝试批量写入
1.1第一数据类型(2, '万科A', 24.33, '-0.17', '-0.0069', '24.5', '24.56', '24.62', '24.23', '601455手', '147029万', '6.8', '0.0062', '116.18亿','97.18亿')
1.2,确保自己使用是哪一个数据库和写入那个表,确保自己密码是正确的。
import pymysql
con = pymysql.connect(host='localhost', user='root',
passwd='pan123456', charset='utf8')
cur = con.cursor()
cur.execute('create database awesome character set utf8')
cur.execute('use awesome')
sqlSentence1= 'create table stock(代码 VARCHAR(20), 名称 VARCHAR(20),最新 float,涨跌 float,涨跌幅 float\
,前收 float,开盘 float, 最高 float, 最低 float, 成交量 VARCHAR(20), 成交额 VARCHAR(20),市盈率 VARCHAR(210),\
换手率 bigint,总股本 VARCHAR(20), 流通股本 VARCHAR(20) )'
cur.execute(sqlSentence1)
print('ok table')
"""
插入数据
"""
val1 = (2, '万科A', 24.33, '-0.17', '-0.0069', '24.5', '24.56', '24.62', '24.23', '601455手', '147029万', '6.8', '0.0062', '116.18亿','97.18亿')
val=tuple(val1)
print(val)
sql = "INSERT INTO stock(代码,名称,最新,涨跌,涨跌幅,前收,开盘,最高,最低,成交量,成交额,市盈率,换手率,总股本,流通股本) VALUES \
(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"\
# %(val[0],val[1],val[2],val[3],val[4],val[5],val[6],val[7],val[8],val[9],val[10],val[11],val[12],val[13],val[14])
print(sql)
cur.executemany(sql,[val])
con.commit()
3.通过excel数据批量写入MySQL
注意:写入excel表的时候,表格里面可能会出现数据缺失和空值的情况需要在写入MySQL前处理这种情况否则会报错
import pymysql
import pandas as pd
import os
con = pymysql.connect(host='localhost', user='root',
passwd='pan123456', charset='utf8')
cur = con.cursor()
cur.execute('create database awesome character set utf8')
cur.execute('use awesome')
print('ok table')
"""
插入数据
"""
# 获取文档
df = pd.read_excel("数据.xls")
sqlSentence1= 'create table stock(代码 VARCHAR(20), 名称 VARCHAR(20),最新 float,涨跌 float,涨跌幅 float\
,前收 float,开盘 float, 最高 float, 最低 float, 成交量 VARCHAR(20), 成交额 VARCHAR(20),市盈率 VARCHAR(210),\
换手率 bigint,总股本 VARCHAR(20), 流通股本 VARCHAR(20) )'
cur.execute(sqlSentence1)
# 获取文档的长度
length = len(df)
for i in range(0, length):
# 数据转字符类型
record = tuple(df.loc[i])
# 插入表数据
sqlSentence="INSERT INTO stock (代码,名称,最新,涨跌,涨跌幅,前收,开盘,最高,最低, \
成交量,成交额,市盈率,换手率,总股本,流通股本) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"\
# 把空值,或者缺失填充
sqlSentence = sqlSentence.replace('nan', 'null').replace('None', 'null').replace('none', 'null')
# 按照循环依次打印
cur.executemany(sqlSentence, [record])
# 结束,关闭
cur.close()
con.commit()
con.close()
print(i)
4.提前在MySQL上面创建表和字段名
上面代码的运行结果