从Python 2.4运行MySQL查询,但没有安装模块(MySQLdb)
我需要从Python 2.4运行MySQL查询,但我无法下载/安装Python的任何模块。从Python 2.4运行MySQL查询,但没有安装模块(MySQLdb)
我无法下载的原因是因为这个脚本将在服务器上运行(RedHat),我们的客户不会让我们下载和安装任何东西。
我一直在尝试使用subprocess
,但我使用的查询是给我一个syntax error
。
如果我从查询浏览器运行它,但在子进程命令[]
中添加引号和逗号使得事情有点令人困惑,该查询在Python之外工作。
我试图运行的命令如下:
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])
语法错误我马上FIELDS TERMINATED BY
后:
之前获得积分的单引号。
File "<stdin>", 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。一旦你需要再次为shell解除它,事情会变得更加混乱。
如果删除'shell = True',那么可以谨慎地为'mysql'二进制文件设置完整路径。 – 2014-10-06 15:13:39
正如您在您的问题中看到的(请参阅语法突出显示),有一个引用问题 – 2014-10-06 15:08:06
我会给[commands](https://docs.python.org/2/library/commands.html)尝试运行MySQL命令 – 2014-10-06 15:09:56
您有使用Python的原因吗?一个简单的bash脚本将会更容易逃脱。 – 2014-10-06 15:12:41