python subprocess mysql_在不安装模块的情况下从Python 2.4运行MySQL查询(MySQLdb)

我需要从Python 2.4运行MySQL查询,但无法下载/安装Python的任何模块。

我无法下载的原因是因为此脚本要在服务器(RedHat)上运行,并且我们的客户不会让我们下载和安装任何东西。

我一直在尝试使用subprocess,但是我正在使用的查询给了我一个syntax error。

如果我从查询浏览器运行该查询,则该查询可在Python外部运行,但是在subprocess命令中添加引号和逗号[]会使情况有些混乱。

我正在尝试运行的命令如下:

subprocess.call(['mysql', '-D DB', '--user="user"', '--password="password"', '-e', '"SELECT cu, control_name FROM PresetProfile WHERE NOT cu='' AND NOT control_name='' INTO OUTFILE '/directory/for/output.file' FIELDS TERMINATED BY ':' LINES TERMINATED BY '\n';"', shell=True])

我得到的语法错误指向:after之前的单引号FIELDS TERMINATED BY。

File "", line 1

subprocess.call(['mysql', '-D DB', '--user="user"', '--password="password"', '-e', '"SELECT cu, control_name FROM PresetProfile WHERE NOT cu='' AND NOT control_name='' INTO OUTFILE '/directory/for/output.file' FIELDS TERMINATED BY ':' LINES TERMINATED BY '\n';"', shell=True])

^

SyntaxError: invalid syntax

一旦创建了此输出文件,就可以停止使用子进程,然后返回常规文件处理。

解决方案

您的查询是这样的:'"SELECT cu, control_name FROM PresetProfile WHERE NOT cu='' AND NOT control_name='' INTO OUTFILE '/directory/for/output.file' FIELDS TERMINATED BY ':' LINES TERMINATED BY '\n';"'

请注意,您已经'在字符串中了-您需要对它们进行转义或使用三引号。

'"SELECT cu, control_name FROM PresetProfile WHERE NOT cu=\'\' AND NOT control_name=\'\' INTO OUTFILE \'/directory/for/output.file\' FIELDS TERMINATED BY \':\' LINES TERMINATED BY \'\\n\';"'

另外,您可能想丢掉shell=True一点-如果仅使用Python,则转义的管理就很困难。一旦需要再次退出外壳,事情就会变得更加混乱。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值