1 import pandas as pd 2 import pymysql 3 4 5 # 参数设置 DictCursor使输出为字典模式 连接到本地用户ffzs 密码为666 6 config = dict(host='localhost', user='xxx', password='xxxx', cursorclass=pymysql.cursors.DictCursor) 7 8 # 建立连接 9 conn = pymysql.Connect(**config) 10 # 自动确认commit True 11 conn.autocommit(1) 12 # 设置光标 13 cursor = conn.cursor() 14 15 # pandas读取文件 这里随便找了一个爬取的股票文件改的名字 16 # usecols 就是说我只用这些列其他列不需要 17 # parse_dates 由于csv只储存str、int、float格式无法储存日期格式,所以读取是设定吧日期列读作时间格式 18 df = pd.read_csv('D:Downloads股票参数沪深300.csv', encoding='gbk', usecols=[0, 3, 4, 5, 6, 9, 11], parse_dates=['date'] ) 19 20 print(df.head(10)) 21 22 # 一个根据pandas自动识别type来设定table的type 23 def make_table_sql(df): 24 columns = df.columns.tolist() 25 types = df.ftypes 26 # 添加id 制动递增主键模式 27 make_table = [] 28 for item in columns: 29 if 'int' in types[item]: 30 char = item + ' INT' 31 elif 'float' in types[item]: 32 char = item + ' FLOAT' 33 elif 'object' in types[item]: 34 char = item + ' VARCHAR(255)' 35 elif 'datetime' in types[item]: 36 char = item + ' DATETIME' 37 make_table.append(char) 38 return ','.join(make_table) 39 40 41 # csv 格式输入 mysql 中 42 def csv2mysql(db_name , table_name, df): 43 # 创建database 44 cursor.execute('CREATE DATABASE IF NOT EXISTS {}'.format(db_name)) 45 # 选择连接database 46 conn.select_db(db_name) 47 # 创建table 48 cursor.execute('DROP TABLE IF EXISTS {}'.format(table_name)) 49 cursor.execute('CREATE TABLE {}({})'.format(table_name,make_table_sql(df))) 50 # 提取数据转list 这里有与pandas时间模式无法写入因此换成str 此时mysql上格式已经设置完成 51 df['date'] = df['date'].astype('str') 52 values = df.values.tolist() 53 # print(values) 54 # 根据columns个数 55 s = ','.join(['%s' for _ in range(len(df.columns))]) 56 # print(s) 57 # executemany批量操作 插入数据 批量操作比逐个操作速度快很多 58 cursor.executemany('INSERT INTO {} VALUES ({})'.format(table_name,s), values) 59 60 61 csv2mysql(db_name="stock_analyze", table_name="hs300" , df=df) 62 63 cursor.execute('SELECT * FROM hs300 LIMIT 5') 64 # scroll(self, value, mode='relative') 移动指针到某一行; 如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条. 65 cursor.scroll(4) 66 cursor.fetchall() 67 conn.close()
refer from: https://blog.csdn.net/tonydz0523/article/details/82529941