2014-10-06 137 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

相關問題