2014-10-06 91 views
0

我需要从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 

一旦我得到这个输出文件的创建,我可以停止使用子并回到普通文件处理。

+0

正如您在您的问题中看到的(请参阅语法突出显示),有一个引用问题 – 2014-10-06 15:08:06

+0

我会给[commands](https://docs.python.org/2/library/commands.html)尝试运行MySQL命令 – 2014-10-06 15:09:56

+0

您有使用Python的原因吗?一个简单的bash脚本将会更容易逃脱。 – 2014-10-06 15:12:41

回答

1

您查询的是:'"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解除它,事情会变得更加混乱。

+1

如果删除'shell = True',那么可以谨慎地为'mysql'二进制文件设置完整路径。 – 2014-10-06 15:13:39