python - 如何在 python 程序中运行复杂的 sql 脚本?

标签 python sql mysql

我有一个大型 SQL 脚本来创建我的数据库(多个表、触发器等。使用 MySQL),我需要从 python 程序中执行该脚本。我的旧代码是这样做的:

sql_file = open(os.path.join(self.path_to_sql, filename), 'r')
sql_text = sql_file.read()
sql_stmts = sql_text.split(';')
for s in sql_stmts:
    cursor.execute(s)

在我开始在我的 sql 脚本中包含触发器之前,它工作正常。因为我现在需要更改分隔符;对于其他方面,为了支持每个触发器中包含多个 SQL 语句,我将每个语句拆分为它自己的字符串的代码不再有效,因为“分隔符 |”我的脚本中的行无法正确拆分,并且我从 cursor.execute(s) 中收到语法错误。

所以,我需要一些方法来告诉 mysqldb 立即执行整个 sql 脚本,而不是单独的 sql 语句。我试过这个:

sql_file = open(os.path.join(self.path_to_sql, filename), 'r')
sql_text = sql_file.read()
cursor.execute(sql_text)

但是,当我尝试运行该代码时出现以下错误: ProgrammingError:(2014,“命令不同步;你现在不能运行这个命令”) 我的 Google-fu 告诉我这是因为 Python mysqldb 包不支持将复杂的 SQL 语句发送到 cursor.execute()。

那我该怎么做呢?我真的很想找到一种完全在 Python 中执行此操作的方法,以便代码保持完全可移植性。我们有几个程序员在 Eclipse 中处理这个项目,一些在 Windows 上,一些在 Mac 上,代码也需要在 Linux 生产服务器上工作。

如果我不能使用 Python 代码来实际运行 SQL,我如何告诉 Python 启动一个单独的程序来执行它?

最佳答案

(不是 python 解决方案)你可以使用

  os.system('mysql < etc')

哦,编辑(python 解决方案):

如果您有按行分解的查询,您可以关闭并重新打开游标并按行执行。

redit:抱歉,只浏览了您的第一段。看起来你一开始就是在做这种事情。

关于python - 如何在 python 程序中运行复杂的 sql 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4045332/

相关文章:

python - 如何分解字符串并按顺序附加其字符?

python - 与变量一起使用的 10e 符号?

python - 将来在不同的时间启动(非常短的) Action 时如何避免启动数百个线程

python - Django,如何使用 django.contrib.auth.models.User 通过 id 获取用户

php - 使用邻接列表模型管理 MySQL 中的分层数据

mysql - BIGINT 与组合(tinyint,int)对于大型 auto_increment 键?

mysql - 如何比较where子句中的多行

php - 在 codeigniter 中创建一个包含 60000 行以上垂直表格的报告。如何分页?

mysql - SQL 根据其他列的唯一性填充新列

MySQL - 索引在登台服务器上工作,但在生产服务器上不起作用