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则是将字符串送入标准输出... 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值