win10系统上批量将CSV导入MYSQL

2018-06-18 00:30:42来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

先简单放一下用到的:

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】,除了设置【local-infile】=1/on之外,还需要在pymysql连接语句里加上【local-infile=True】,不然mysql还会报错EORRO1148。语句即:

con = pymysql.connect(host='', port=, user='', passwd='', db='', local_infile=True)

++++++++++++++++++++++++++++++++++被自己蠢哭的分割线+++++++++++++++++++++++++++++++++++++++++++++++++++++++

为了提高速度,就想去掉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"

然后数据就顺利导入了。

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

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:python编写的简单的mysql巡检脚本

下一篇:MySQL多表