zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    trackr: An AngularJS app with a Java 8 backend – Part III
    trackr: An AngularJS app with a Java 8 backend – Part II
    21. Wireless tools (无线工具 5个)
    20. Web proxies (网页代理 4个)
    19. Rootkit detectors (隐形工具包检测器 5个)
    18. Fuzzers (模糊测试器 4个)
    16. Antimalware (反病毒 3个)
    17. Debuggers (调试器 5个)
    15. Password auditing (密码审核 12个)
    14. Encryption tools (加密工具 8个)
  • 原文地址:https://www.cnblogs.com/Ian-learning/p/12492290.html
Copyright © 2011-2022 走看看