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()

最新文章

  1. 设计工具 -uml
  2. 探索jdk8之ConcurrentHashMap 的实现机制
  3. *[topcoder]BracketExpressions
  4. 重载 C 函数
  5. Android 获取 AudioRecord 麦克风音量大小并做选择性发送
  6. Python面试题之copy/deepcopy详解
  7. 近期对FTP及Excel数据处理的一些摸索
  8. mybatis的那些事
  9. 使用WebGL 自定义 3D 摄像头监控模型
  10. nodejs, 阿里oss上传下载图片
  11. ue4 材质表达式分类
  12. ExpandableListView
  13. [Python设计模式] 第16章 上班,干活,下班,加班——状态模式
  14. 20165215 实验一 Java开发环境的熟悉
  15. Eclipse经常使用快捷键
  16. ES6学习--Array.from()方法
  17. 2018.07.17 CQOI2017 余数求和(整除分块)
  18. Java程序员面试之葵花宝典
  19. Host ‘host_name’ is blocked
  20. 20155332 2016-2017-2 《Java程序设计》第10周学习总结

热门文章

  1. 【开源监控】Prometheus+Node Exporter+Grafana监控linux服务器
  2. Windows安装Nginx需要注意的地方
  3. json工具类(二)——google包
  4. Flink基本的API(续)
  5. .net core使用jwt自动续期
  6. IOS—— strong weak retain assign 学习
  7. 【转载】Gradle学习 第一章:引言
  8. unity点击按钮弹出操作提示界面
  9. HTTP是什么,不是什么?
  10. SQOOP的使用方法