使用python捕获mysql select语句的输出

使用python捕获mysql select语句的输出,python,Python,使用Python2.4,我想从mysql命令捕获输出。需要注意的一点是,我需要使用echo对SQL语句进行管道处理 echo 'SELECT user FROM mysql.user;' | mysql 我看到了使用call、os.system和popen的示例,但对于我的python版本,最好使用什么并捕获元组中的输出 感谢子流程模块是运行命令和控制输入输出的最灵活的工具。以下命令运行命令并将输出捕获为行列表: import subprocess p = subprocess.Popen(

使用Python2.4,我想从mysql命令捕获输出。需要注意的一点是,我需要使用echo对SQL语句进行管道处理

echo 'SELECT user FROM mysql.user;' | mysql
我看到了使用call、os.system和popen的示例,但对于我的python版本,最好使用什么并捕获元组中的输出


感谢

子流程模块是运行命令和控制输入输出的最灵活的工具。以下命令运行命令并将输出捕获为行列表:

import subprocess

p = subprocess.Popen(['/bin/bash', '-c', "echo 'select user from mysql.user;' | mysql" ],
    stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

lines = [line for line in p.stdout]

在Windows上,bash-c将被cmd/c替换。

而您是通过CLI工具而不是DB-API来执行此操作的。为什么又是这样呢?我将执行随机CLI命令,而不仅仅是这一个命令,我不想麻烦任何DB模块。这个字符串可能是最完整的。使用像oursql这样的库将更简单、更直接、更安全、更健壮。它不会阻止您将子流程用于适合的任务。没有理由运行
/bin/bash
。如果有理由使用shell,只需使用
shell=True
,但在这种情况下,没有理由使用shell,只需将查询直接传递给流程即可。(与使用像oursql或MySQLdb这样的模块相比,这都是些小东西。)此外,
[p.stdout中的行对行]
是一种非常愚蠢的方法,当有
list(p)
p.communicate()
这样的选项时。