读取excel数据需要注意的地方以及读取方式:
- python读取excel表时,需要注意对时间的处理:
原因:
在使用xlrd读取Excel表格中的日期格式时,读出的内容和原来Excel表格中的内容不一致。读取出来的是一个浮点数。导致不能正确使用。而xldate_as_tuple方法可以很好地解决这个问题。
函数定义:
def xldate_as_tuple(xldate, datemode)
- 参数一:要处理的单元格值
- 参数二:时间基准(0代表以1900-01-01为基准,1代表以1904-01-01为基准,此处一般选择0即可)
返回值:返回一个元组,他的值类似于(year, month, day, hour, minute, nearest_second)
- 使用python将时间写入数据库中表里面时,需要注意对时间格式的处理:
时间需要处理成2020-11-20样式的字符串(具体处理方式详见后面的代码内容),只有这样处理,时间才能自动在数据库被自动转换成datetime或者date类型 - 接受数据表中的时间列类型需要设置为date或者datetime类型
drop table tb_msgstock;
create table tb_msgstock
(
Date date not null,
open float not null,
High float not null,
Low float not null,
Close float not null,
Adj_close float not null,
Volume float not null
);
- 参考代码如下所示:
import xlrd
import MySQLdb
conn = MySQLdb.connect(host='47.115.130.16', port=3306,
database='hrs3', charset='utf8',
user='root', password='123Hcl456&',
autocommit=False)
wb = xlrd.open_workbook('阿里巴巴2017年股票数据.xlsx')
sheetname = wb.sheet_names()[0]
sheet = wb.sheet_by_name(sheetname)
print(sheet.nrows, sheet.ncols)
try:
with conn.cursor() as cursor:
for row in range(sheet.nrows):
params=[]
for col in range(sheet.ncols):
value = sheet.cell(row, col).value
if row > 0:
if col == 0:
value = xlrd.xldate_as_tuple(value, 0)
value = f'{value[0]}-{value[1]:>02d}-{value[2]:>02d}'
else:
value = f'{value:.2f}'
params.append(value)
param=tuple(params)
print(param)
if row > 1:
cursor.execute(
'insert into tb_msgstock(Date,open,High,Low,Close,Adj_close,Volume) '
'values (%s,%s,%s,%s,%s,%s,%s)',
param
)
print("添加成功")
conn.commit()
except MySQLdb.MySQLError as err:
print(err)
conn.rollback()
finally:
conn.close()