2015-04-17 148 views
1

我想從python執行以下命令。當我從shell運行它時,我得到所需的輸出,但用子進程調用它,我得到一個錯誤。作爲python子進程的mysql命令

的命令是:

 to_date=`date +%Y-%m-%d`; mysql -uroot -p**** lportal -e "select COUNT(*) from User_ where loginDate like \"$to_date%\";" | sed 1d 

這是我的Python代碼:

from subprocess import * 

    cmd=''' to_date=`date +%Y-%m-%d`; mysql -uroot -p**** lportal -e "select COUNT(*) from User_ where loginDate like \"$to_date%\";" | sed 1d ''' 
    cmd_out=Popen(cmd,stdout=PIPE,stdin=PIPE,shell=True,stderr=PIPE).communicate() 
    print cmd_out 

這是我的錯誤,我知道這是\」有關,但沒有弄清楚如何解決呢

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-04-17%' at line 1 
+1

你爲什麼要這樣做,而不是使用mysql庫直接連接? –

回答

0

我同意來自@Daniel Roseman的評論,但是您是否嘗試過用單引號代替S上的雙引號QL命令?就像這樣:

select COUNT(*) from User_ where loginDate like '$to_date%'; 

或者,也許雙反斜線,轉義反斜線,而不是報價,蟒串...

0

有,爲什麼你使用什麼原因呢?

`date +%Y-%m-%d` 

相反的:

import time 
date = time.strftime("%Y-%m-d", time.localtime()) 

當我做這樣的事情,我總是用這個方法:

import subprocess 
cmd = 'xterm -display {} -e {}'.format(display, command) 
status = subprocess.call(cmd.split()) 

命令會更清潔閱讀:

cmd = 'mysql -u {} -p {} lportal -e "select COUNT(*) from User_ where loginDate like "{}" | sed 1d'.format(username, password, date) 

無法測試上一個co因爲我沒有這裏的MySQL ...

希望這會幫助你找到解決方案。


但說實話我永遠不會查詢這樣的數據庫。 Daniel Roseman是完全正確的,你應該使用一個mysql庫來實現你想要的東西,而不需要太多的努力。

相關問題