返回
顶部

修改密码

首页 > 数据库 > MYSQL > 正文
win10系统上批量将CSV导入MYSQL

+1

-1

收藏

+1

-1

点赞0

评论0

先简单放一下用到的: MYSQL : 5.6版本 python3 powershell。 将csv导入mysql,主要就是用mysql的load data功能实现,其他前辈也都讲得很清楚了,这里简单列一下语句(注意enclosed只有一个双引号,此外‘忽略’那里,rows表示的是列,lines表示的是行,这里略去首行):loa…

先简单放一下用到的:

MYSQL : 5.6版本

python3

powershell。

将csv导入mysql,主要就是用mysql的load data功能实现,其他前辈也都讲得很清楚了,这里简单列一下语句(注意enclosed只有一个双引号,此外‘忽略’那里,rows表示的是列,lines表示的是行,这里略去首行):

load data local infile 'filepath' into table tablename fields terminated ',' enclosed by '"' lines terminated by '\n' ignore 1 lines:

 local关键字声明是从客户端传来服务器,即使文件在本地也可以用,就是速度会慢一些。而如果文件在本地且不用local关键字,那么需要把文件放在Mysql的Data文件夹下,查看Mysql的data文件夹:

show variables like 'datadir'

然后就是批量的实现了,由于掉了好几次坑,所以我用了两种办法来实现,一个用python3,另一个用Powershell的脚本

不知道为什么windows上的MySQLdb支持不了python3(Linux的可以),于是换了pymysql,用了local关键字导入了第一批数据,没有问题,就是速度比较慢,感觉每秒1M多吧。

为了提高速度,就想去掉LOCAL,于是把第二批数据拷贝到了data文件夹下,结果不知道是数据的问题还是mysql的问题,出现数据类型不匹配报错:

1366 : incorrect decimal value: '' for column 'column_name'  in row 1

 但神奇的是我的数据文件里并没有空值......而且如果不用python,而是直接用mysql执行sql语句,数据能顺利导入。于是菜鸟我以为是pymysql出了什么问题,就计划用别的方法,搜索了一下想用脚本,刚好windows上有powershell,感觉上手还挺方便,就用了它。

最早的时候,想直接用命令行方式:mysql -uuser -ppwd -e"SQL", 但这种方式里-e后接的sql不能是变量,即使是两个字符串拼接起来也不行。所以只好用其他方法,查询到可以用.net框架连接操作mysql,于是就按http://www.xuebuyuan.com/441945.html里的方法(原谅我没加上链接,但不知道为什么一加编辑页面就崩溃),不过由于我个人只需要创建表和插入数据的操作,并不需要获取数据,所以构建好command后,用

$command.ExecuteNonQuery();

直接执行即可。

然而悲催的是,在顺利load了十来个数据文件后,它又报错了!还是原来的错误1366!

 这下我是真得想不出原因会在哪里了,只好按最早查到的解决方案,将mysql的配置文件my.ini里的sql-mode

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

改成

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后数据就顺利导入了。

然而我还是不知道前面为什么会报错,而且有时报错有时正常?如果有大佬看到这篇文章并愿意解答的话,非常感谢!

扫一扫在手机打开

评论
已有0条评论
0/150
提交
热门评论
相关推荐
数据库表连接的简单解释
  • 操作技巧
  • 2022-05-25 18:24
  • 22 0 0
+1
SQL 行转列,列转行
  • 操作技巧
  • 2022-05-25 18:24
  • 20 0 0
+1
一起看懂Redis两种持久化方式的原理
  • 操作技巧
  • 2022-05-25 18:24
  • 32 0 0
+1
为什么要用Redis
  • 操作技巧
  • 2022-05-25 18:24
  • 13 0 0
+1