Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql命令作为python子进程_Python_Mysql_Subprocess - Fatal编程技术网

mysql命令作为python子进程

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 *

我想从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 *

    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库进行接口?