python3利用pandas将csv文件中的数据导入mysql数据库
2020-02-17 04:16
225 查看
先定义一个函数将csv文件的数据类型与mysql的数据类型匹配,主要是日期与时间这两个数据类型的匹配。
[code]def make_table_sql(df): columns = df.columns.tolist() types = df.ftypes # 添加id 制动递增主键模式 make_table = [] for item in columns: if 'int' in types[item]: char = item + ' INT' elif 'float' in types[item]: char = item + ' FLOAT' elif 'object' in types[item]: char = item + ' VARCHAR(255)' elif 'datetime' in types[item]: char = item + ' DATETIME' make_table.append(char) return ','.join(make_table)
定义建立数据库与表的函数
[code]def csv2mysql(db_name, table_name,df): # 创建database cursor.execute('CREATE DATABASE IF NOT EXISTS {} DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci'.format(db_name)) # 选择连接database conn.select_db(db_name) # 创建table cursor.execute('DROP TABLE IF EXISTS {}'.format(table_name)) cursor.execute('CREATE TABLE {}({})'.format(table_name, make_table_sql(df)))
定义往表中插入数据的函数
[code]def insert_data(db_name, table_name,data): # 提取数据转list 这里有与pandas时间模式无法写入因此换成str 此时mysql上格式已经设置完成 df['DATE'] = df['DATE'].astype('str') df['LIVE_START'] = df['LIVE_START'].astype('str') df['LIVE_END'] = df['LIVE_END'].astype('str') values = df.values.tolist() # 根据columns个数 s = ','.join(['%s' for _ in range(len(df.columns))]) # executemany批量操作 插入数据 批量操作比逐个操作速度快很多 cursor.executemany('INSERT INTO {} VALUES ({})'.format(table_name, s), values)
连接数据库
[code]config = dict(host='localhost', user='root', password='123456', cursorclass=pymysql.cursors.DictCursor ) # 建立连接 conn = pymysql.Connect(**config) # 自动确认commit True conn.autocommit(1) # 设置光标 cursor = conn.cursor()
对于需要批量处理的csv文件,需要遍历文件夹目录下的文件,然后逐个读取插入
[code]i=0 rootdir = 'D:\huashu' list = os.listdir(rootdir) #列出文件夹下所有的目录与文件 for i in range(0,len(list)): path = os.path.join(rootdir, list[i]) if os.path.isfile(path): print('huashu'+path[18:26]) df = pd.read_csv(path, encoding='gbk', parse_dates=['DATE', 'LIVE_START', 'LIVE_END']) df.fillna('', inplace = True) if i == 0: csv2mysql(db_name='huashu', table_name='time',df=df) i=1 insert_data(db_name='huashu', table_name='time',data=df)
这里的read_csv函数中有很多参数,可以根据自己的需要选取,比如选择自己想导入的字段,编码格式等,
我这里的parse_dates用于转换csv中的日期时间格式到mysql中。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 【Python基础操作】1.数据读取(csv,Excel,MySQL)
- Python3.6.2 图形界面模块Tk (Day1)
- 用python+tkinter写个校验和工具
- python selenium+pywin32 实现网页另存为
- python 输出所有大小写字母和0~9数字
- pycharm导入python包
- python神器pycharm的安装
- python字符串前加 f 的含义
- Python中 IOError 和 FileNotFoundError
- Python-List
- Python-List-Append
- Python-List-extend
- Python-List-Pop
- Python-List-sort
- 关于pycharm用不了numpy
- 零基础学Python
- PAT 1010 一元多项式求导 Python实现
- 最长回文子串(python实现)
- 整数反转(Python实现)
- python基础(一)