【问题标题】:Running MySQL query from Python 2.4 while not installing modules (MySQLdb)在不安装模块的情况下从 Python 2.4 运行 MySQL 查询 (MySQLdb)
【发布时间】:2014-10-06 15:04:16
【问题描述】:

我需要从 Python 2.4 运行 MySQL 查询,但我无法下载/安装任何 Python 模块。

我无法下载的原因是因为这个脚本要在服务器 (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

创建此输出文件后,我可以停止使用子进程并返回到常规文件处理。

【问题讨论】:

  • 正如您在问题中看到的(请参阅语法突出显示),存在引用问题
  • 我会尝试commands 运行 MySQL 命令
  • 你使用 Python 有什么原因吗?一个简单的 bash 脚本会更容易转义。

标签: python mysql syntax-error subprocess


【解决方案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 再次取消转义它,事情就会变得更加混乱。

【讨论】:

  • 如果删除shell=True,那么将mysql 二进制文件的完整路径放入可能是谨慎的。
猜你喜欢
  • 2012-03-04
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
相关资源
最近更新 更多