我有以下代码行:
sql = "source C:\\My Dropbox\\workspace\\projects\\hosted_inv\\create_site_db.sql"
cursor.execute (sql)当我执行我的程序时,我会得到以下错误:
错误1064:您的SQL语法出现了错误;请检查与您的MySQL服务器版本对应的手册,以便在第1行使用接近“源C:\My”的正确语法。
现在,我可以将以下内容作为查询复制并通过mysql:
source C:\\My Dropbox\\workspace\\projects\\hosted_inv\\create_site_db.sql而且效果很好。当我检查我的脚本执行的查询的查询日志时,它会显示我的查询如下:
source C:\\My Dropbox\\workspace\\projects\\hosted_inv\\create_site_db.sql但是,当我手动粘贴并执行它时,整个create_site_db.sql将在查询日志中展开,并显示该文件中的所有sql查询。
在mysqldb如何执行查询方面,我是不是遗漏了什么?我是不是遇到了一个限制。我的目标是运行一个sql脚本来创建模式结构,但是我不想在shell进程中调用mysql来获取sql文件。
有什么想法吗?谢谢!
发布于 2009-12-19 08:27:17
正如其他人所说,您不能在source MySQLdb API中使用MySQLdb命令
因此,与其运行该文件,不如加载文件并执行它。
让我们假设您的.sql文件
create database test;阅读内容如下
sql=open("test.sql").read()然后执行
cursor.execute(sql);您将获得新的数据库“测试”。
发布于 2009-12-19 08:07:37
source命令是仅由mysql命令行客户端识别的内置命令之一。它不支持作为可以通过任何API执行的语句。
有些人认为您可以在";“语句结束符上拆分一个SQL脚本文件,并在得到的每一行上调用execute()。但有许多例外情况:
CONNECT、SOURCE、CHARSET、WARNINGS、QUIT等。;中终止,例如DELIMITER。;但不是作为终止符的语句,如CREATE TRIGGER。;,甚至引用标识符。要以编程方式加载SQL脚本,您必须复制mysql客户端的大量功能。所以最好是分叉一个进程,以脚本作为输入来实际执行那个客户端程序。
另请参阅:
发布于 2009-12-19 07:57:55
“‘source”不是SQL命令,而是mysql命令行客户端的内部命令。
https://stackoverflow.com/questions/1932298
复制相似问题