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