mysql命令作为python子进程
我想从python执行以下命令。当我从shell运行它时,我得到了所需的输出,但是用子进程调用它时,我得到了一个错误 命令是:mysql命令作为python子进程,python,mysql,subprocess,Python,Mysql,Subprocess,我想从python执行以下命令。当我从shell运行它时,我得到了所需的输出,但是用子进程调用它时,我得到了一个错误 命令是: 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 *
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
我同意@Daniel Roseman的评论,但是您在SQL命令中尝试过单引号而不是双引号吗?像这样:
select COUNT(*) from User_ where loginDate like '$to_date%';
或者在python字符串上加倍反斜杠,以转义反斜杠而不是引号…是否有使用的原因
`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)
无法测试最后一个命令,因为我这里没有mysql
希望这将帮助您找到解决方案
但老实说,我永远不会像这样查询数据库。Daniel Roseman是完全正确的,您应该使用mysql库来实现您想要的功能,而无需付出太多的努力。为什么要这样做,而不是直接使用mysql库进行接口?