csv文件快速转存到mysql

目录

  • csv文件快速转存到mysql

    • 连接数据库
    • 读取csv文件内容:
    • 创表:
    • csv数据导入样式:
    • 完整脚本:

csv文件快速转存到mysql

连接数据库

连接数据库:
    con = pymysql.connect(user="root",
                      passwd="root",
                      db="test",
                      host="47.95.xxx.xxx",
                      local_infile=1)

将csv批量写到数据库,需要设置local_infile参数,如果不添加会报错。!

连接完数据库我们便可以使用游标来执行sql语句了:

cur = con.cursor()
定义好了游标我们就可以使用execute方法来执行sql语句了。

cur.execute("set names utf8")
cur.execute("SET character_set_connection=utf8;")

读取csv文件内容:

with open(file_path, 'r', encoding='utf8') as f:
    reader = f.readline()
    print(reader)
    devide = reader.split(',')  # 做成列表
    devide[-1] = devide[-1].rstrip('\n')   # 去除最后的换行符
    print(devide)

创表:

需要创建表,在创建表之前我们需要将每个列指定一下格式:

column = ''
for dd in devide:
    column = column + dd + ' varchar(255),'

拼接好后我们需要将最后一个列的逗号去掉
col = column.rstrip(',')

创建表:
table_name = "TBexport"
create_table_sql = 'create table if not exists {} ({}) DEFAULT CHARSET=utf8'    .format(table_name, col)
cur.execute(create_table_sql)

插入数据的语句:

file_path = "export.csv"
data = 'LOAD DATA LOCAL INFILE \'' + file_path        + '\'REPLACE INTO TABLE '        + table_name        + 'CHARACTER SET UTF8 FIELDS TERMINATED BY \','          '\' ENCLOSED BY \'\"\' '          'LINES TERMINATED BY \'\n\' IGNORE 1 LINES;'
cur.execute(data.encode('utf8'))

con.commit()  # 提交事务

关闭游标和数据库连接。
cur.close()
con.close()

csv数据导入样式:

mysql支持csv数据的导入,以下是sql的语法:

LOAD DATA INFILE '文件名'
REPLACE INTO TABLE 表名
CHARACTER SET UTF8
FIELDS TERMINATED BY ';'

ENCLOSED BY '"'
LINES TERMINATED BY '\n'

完整脚本:

import pymysql

# file_path = "exam.csv"
# table_name = 'update_time_table'
file_path = "export.csv"
table_name = "TBexport"
try:
    con = pymysql.connect(user="root",
                          passwd="root",
                          db="test",
                          host="47.95.20x.xxx",
                          local_infile=1)
    con.set_charset('utf8')
    cur = con.cursor()
    cur.execute("set names utf8")
    cur.execute("SET character_set_connection=utf8;")

    with open(file_path, 'r', encoding='utf8') as f:
        reader = f.readline()
        print(reader)
        devide = reader.split(',')  # 做成列表
        devide[-1] = devide[-1].rstrip('\n')  # 去除最后的换行符
        print(devide)

    column = ''
    for dd in devide:
        #如果标题过长,只能存成text格式
        if dd == "标题":
            column = column + dd + ' TEXT,'
        else:
            column = column + dd + ' varchar(255),'
    col = column.rstrip(',')  # 去除最后一个多余的,
    # print(column[:-1])
    create_table_sql = 'create table if not exists {} ({}) DEFAULT CHARSET=utf8'.format(table_name, col)
    print(create_table_sql)
    data = 'LOAD DATA LOCAL INFILE \'' + file_path + '\'REPLACE INTO TABLE ' + table_name + ' CHARACTER SET UTF8 FIELDS TERMINATED BY \',\' ENCLOSED BY \'\"\' LINES TERMINATED BY \'\n\' IGNORE 1 LINES;'
    cur.execute(create_table_sql)
    cur.execute(data.encode('utf8'))
    print(cur.rowcount)
    con.commit()
except:
    print("发生错误")
    con.rollback()

finally:
    cur.close()
    con.close()

原文地址:https://www.cnblogs.com/shaozheng/p/12019478.html

时间: 2024-10-08 12:06:42

csv文件快速转存到mysql的相关文章

使用bash将csv文件数据读写到MySQL数据库的脚本之一

情景: 有一个包含多个系的学生详细信息的csv文件,需要将文件的内容插入到一个数据表中,保证每一个系生成一个单独的排名列表. 学习信息表 studentdata.csv 文件的数据如下: 1,Navin M,98,CS 2,Kavya N,70,CS 3,Nawaz O,80,CS 4,Hari S,80,EC 5,Alex M,50,EC 6,Neenu J,70,EC 7,Bob A,30,EC 8,Anu M,90,AE 9,Sruthi,89,AE 10,Andrew,89,AE 脚本思

使用DataX将.csv文件的数据读入Mysql数据库

一:DataX下载 下载页面地址:https://pan.baidu.com/s/10J83j25_ohC4O3XHl9diDQ 提取码: cq6n 二:安装 将下载后的压缩包直接解压安装到电脑上就可以了 三:测试 要想运行datax先要安装python环境: 检验是否存在python环境在cmd中输入python就会知道如果已经有python环境就如下所示出现版本等信息: 进入安装好的datax目录下bin目录中,里面有datax.py文件,可以在cmd中测试(此处是我自己的目录,具体根据自己

从csv文件导数据到MySQL

导入: load data local infile 'D:\\top-1m.csv'    (注意要加上local)10.21.into table `site` fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\n'; 导出: select * from `site` into local outfile 'D:\\top-1m.csv' fields t

Spring-Batch处理MySQL数据后存到CSV文件

1 介绍 用Spring Batch实现了个简单的需求,从MySQL中读取用户表数据,根据生日计算年龄,将结果输出到csv文件. 1.1 准备表及数据 user test; DROP TABLE IF EXISTS `test_user`; CREATE TABLE `test_user` ( `id` int(11) NOT NULL auto_increment, `name` varchar(45) NOT NULL default '', `birthday` datetime defa

Spring Batch示例: 读取CSV文件并写入MySQL数据库

Spring Batch示例: 读取CSV文件并写入MySQL数据库 GitHub版本: https://github.com/kimmking/SpringBatchReferenceCN/blob/master/01_introduction/Spring_Batch_MySQL.md 原文链接: Reading and writing CVS files with Spring Batch and MySQL 原文作者: Steven Haines - 技术架构师 下载本教程的源代码: S

Spring Batch使用示例: 读取CSV文件并写入MySQL数据库

GitHub版本: https://github.com/kimmking/SpringBatchReferenceCN/blob/master/01_introduction/Spring_Batch_MySQL.md ------------ 编写批处理程序来处理GB级别数据量无疑是种海啸般难以面对的任务,但我们可以用Spring Batch将其拆解为小块小块的(chunk). Spring Batch 是Spring框架的一个模块,专门设计来对各种类型的文件进行批量处理. 本文先讲解一个简

关于MySQL中使用LOAD DATA INFILE导入csv文件时的日期格式问题

在使用MySQL时,常常会用到Load Data Infile来导入数据,在遇到Date类型的列时,有时会遇到格式转换的问题: 首先创建一张简单的people表,包含名字,生日,年龄三个字段: mysql> create table people( -> name varchar(10) NOT NULL, -> birthday date NOT NULL, -> age int NOT NULL); Query OK, 0 rows affected (0.18 sec) 构造

CSV文件导入Mysql出现的乱码等问题 (转载)

将*.csv文件导入mysql可使用LOAD DATA INFILE, 概要写法: Load data in file 具体语法使用可参照:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#load-data 如果一个表中只有英文字符则导入不出现问题,写法也极其简单: LOAD DATA LOCAL INFILE 'D:\\ports.csv' INTO TABLE ports; 遇到的问题一:ports.csv文件中存在中文字符,导入

用php导入10W条+ 级别的csv大文件数据到mysql。导出10W+级别数据到csv文件

转自:http://blog.csdn.net/think2me/article/details/12999907 1. 说说csv 和 Excel 这两者都是我们平时导出或者导入数据一般用到的载体.两者有什么区别呢?csv 格式更兼容一点.那么共同点都是GBK格式的,非UTF8.所以我们上传文件的时候,老是出现乱码,就是编码问题没有转好导致. 2. 推荐的几种方法 1. 函数 fgetss($handel);  返回字符串.它就是strip_tags(fget($handel))的组合读取cs