pymysql 將數據導入至數據庫


 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM