• 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

  • 相关阅读:
    jQuery offset获取坐标不精确的问题
    RPG Maker VX地图随机气泡对话 Ver1.0
    Qt绘图控件qwt绘制等比例坐标图
    Java服务端极光推送整合Ios、Android
    Jpush给 iOS 平台推送 title 值失败
    java之Hibenate中监听事件的重写和二级cache缓存
    java之Hibeante中SQL语句的使用
    Hibernate注解符合主键关联关系、持久化传播、继承映射
    hibernate之数据库注解关联关系
    hibernate(四) 双向多对多映射关系
  • 原文地址:https://www.cnblogs.com/Ian-learning/p/12492290.html
Copyright © 2020-2023  润新知