大文件入库MySQL的四种方式(insert into、mysqlimport、load data、Pandas)

说明:仅供学习使用,请勿用于非法用途,若有侵权,请联系博主删除

作者:zhu6201976

博客:https://blog.csdn.net/zhu6201976

一、需求

批量入库目录下所有csv大文件(100M以上)

 

二、实现方式分析

1.insert into 逐行读文件,封装sql,执行sql,速度极慢,需预先创建数据库、表结构;

2.mysqlimport 对 load data 的简易封装,速度快,需预先创建数据库、表结构;

3.load data MySQL提供的大文件高速入库方式,需预先创建数据库、表结构;(推荐)

4.Pandas 提供 DataFrame --> 表 的映射,可实现大文件快速入库,需预先创建数据库;(推荐) 

创建数据库、表注意事项:

1.若文本中含有特殊字符,如表情符 ,设置数据库字符集为 utf8mb4

2.为方便插入,入库环节不设定主键,待入库完后视需求设定,表结构字段类型统一设置为大文本Text

三、load data

官方文档:https://dev.mysql.com/doc/refman/8.0/en/load-data.html

语法:

参数含义详见文档,此处不再赘述。 

示例代码:

from pymysql import connectclass LoadData(object):def __init__(self):self.host = 'localhost'self.port = 3006self.user = 'root'self.password = 'root'self.database = 'test'self.conn = connect(host=self.host, port=self.port, user=self.user, password=self.password,database=self.database, local_infile=True, charset='utf8')self.cursor = self.conn.cursor()def run(self):file_path = r'C:\Users\Tesla\Desktop\ratings.csv'table_name = 'ratings'self.conn.ping()load_data_sql = f"load data concurrent local infile '{file_path}' replace into table {table_name} character set utf8 fields terminated by ',' enclosed by '\"' escaped by '' lines terminated by '\r\n' ignore 1 lines;"count = self.cursor.execute(load_data_sql)self.conn.commit()load_data = LoadData()
load_data.run()

 四、Pandas

官方文档:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_sql.html?highlight=to_sql#pandas.DataFrame.to_sql

示例代码:

入库结果:

注意事项:

1.依赖环境 sqlalchemy pymysql

pip install sqlalchemy

pip install PyMySQL

2.连接数据库时若不指定引擎类型,默认使用MySQLdb,Python3已不支持,若指定为mysqlconnector 则入库大文件中断报错,此处用pymysql解决。

另附:postgresql pandas入库代码

import pandas as pd
from sqlalchemy import create_enginedf = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})
df.index.name = 'id'
conn = create_engine('postgressql://root:root@localhost:5432/jing_dong', echo=True)
df.to_sql(name='jing_dong', con=conn, if_exists='replace', schema='stg')print('finish')


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部