16
社区成员




# -*- coding: UTF-8 -*-
import pymysql#导入包
import datetime
import os
db=pymysql.connect(host='localhost',port=3306,user='root',password='****',db='database_asset')#数据库链接
cur=db.cursor()#创建游标,就是用来执行sql语句的
now_time = datetime.datetime.now()#开始运行时间
print(now_time)#开始运行时间显示在屏幕上
n=0#用n记录导入文件数
# filePath = input('请输入文件所在路径:')#通过屏幕输入指定csv文件所在文件夹。
file = r'D:\database_asset'#指定csv文件所在文件夹,这之前可以用input命令,通过屏幕输入指定csv文件所在文件夹。CSDN上找的,忘记出自哪位大咖了。
for root, dirs,files in os.walk(file):
if root != file:
break
for file in files:
path = os.path.join(root, file)#绝对路径csv文件
d=path[18:24]#证券代码
cur.execute("load data infile %s into table gpdata fields terminated by ',' lines terminated by '\n' ignore 1 rows",path)#导入数据
db.commit()
cur.execute("update gpdata set dm=%s where dm is null", d)#添加证券代码
n+=1
print('\b' * 40 + ("已导入"+str(n)+"个文件,"+ str(n * 242)+"条数据!"+"已运行:"+str(datetime.datetime.now()-now_time)).ljust(20), end='')
cur.execute("delete from gpdata WHERE open is null")#删除开盘价为空的记录
cur.execute("alter table gpdata modify dm char(6) first")#将证券代码字段调整到最前面
db.commit()
cur.execute("alter table gpdata modify column date date not null")#将交易日期字段类型改为日期型,并设为非空字段,否则不让设置为主键。
cur.execute("alter table gpdata add primary key(dm,date)")#主键设置为证券代码、日期组成的联合主键
print("")
new_time = datetime.datetime.now()#新的时间,就是脚本运行结束的时间哈
print('开始时间:',now_time,'结束时间:',new_time,'共用时:',new_time-now_time,'共导入:',n,'个文件',n*242,'条数据,累死我了!!!')
db.commit()#“增”、“删”、“改”后提交事务,个人理解为“增”、“删”、“改”后刷新数据库
db.close()#关闭链接
end#完成任务,结束!!!
5073个csv格式证券交易数据文件
代码运行过程,期间显示开始运行时间,监测已经导入多少个文件和多少条数据记录以及代码运行时间。
代码运行结束,显示代码开始运行时间,代码运行结束时间,代码运行耗时,共导入多少个文件,多少条数据记录。
共运行了1小时34分钟,时间都耽误在添加证券代码上了cur.execute("update gpdata set dm=%s where dm is null", d),哪位大咖有好办法,此处帮忙优化一下,谢谢。
代码运行后,数据表结构。
代码运行后的数据。
代码运行后,经导入、整理共1227666条数据。
数据的逻辑备份。
非常好!