Python3 MySQL CSV

今天遇到一个问题, 我需要在Python3里面去load本地的CSV 文件到MySQL中(5.1.63)
直接在shell里面写如下的命令是可以正常实现我要的效果的
load data local infile '/root/2012-08-10.csv' into table market fields terminated by ',' lines terminated by '\n';

由此想用Python去调用shell, 然后再利用shell去控制MySQL的local, 这样理论上应该是可行的.而且我看到过一个前辈写的perl的代码就是这么作的.但我一直在怀疑,这样不知道算不算旁门左道......如果有问题的话,这样写出来的代码应该是很难维护的..

最后够成功的达到目的了但是其中的周折记录在此

版本1:在MySQL命令行下输入

use test;

load data local infile '/root/2012-08-10.csv' into table market fields terminated by ',' lines terminated by '\n';

成功达到效果


版本2:在shell下输入

"use test;load data local infile '/root/2012-08-10.csv' IGNORE into table market FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'" | mysql -uroot -psmall`;

失败


版本3:在shell下输入

`echo "use test;load data local infile '/root/2012-08-10.csv' IGNORE into table market FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'" | mysql -uroot -psmall`;

成功


版本4:在Python中输入

cmd = """`echo "use test;load data local infile '/root/2012-08-10.csv' IGNORE into table market FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'" | mysql -uroot -psmall`;"""

os.system(cmd)

成功


其实在版本2到版本3的转变当中, 我遇到了很大的麻烦, 原因在于对shell不熟悉,对管道的概念不是很清楚, 竟然没有意识到管道需要左边部分的标准输出作为右边部分的标准输入而漏掉了echo. 恰好echo则是将字符串送入标准输出... 



你可能感兴趣的:(学习)