我有一个大型 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/