使用Python mysqldb模块无法使MySQL源查询工作

Chr*_*ris 5 python mysql scripting

我有以下几行代码:

sql = "source C:\\My Dropbox\\workspace\\projects\\hosted_inv\\create_site_db.sql"
cursor.execute (sql)
Run Code Online (Sandbox Code Playgroud)

当我执行我的程序时,我收到以下错误:

错误1064:您的SQL语法中有错误; 查看与您的MySQL服务器版本对应的手册,以便在第1行'source C:\ My Dropbox\workspace\projects\hosted_inv\create_site_db.sql'附近使用正确的语法

现在我可以将以下内容复制并发送到mysql作为查询:

source C:\\My Dropbox\\workspace\\projects\\hosted_inv\\create_site_db.sql
Run Code Online (Sandbox Code Playgroud)

它完美无缺.当我检查查询日志以查找我的脚本执行的查询时,它显示我的查询如下:

source C:\\My Dropbox\\workspace\\projects\\hosted_inv\\create_site_db.sql
Run Code Online (Sandbox Code Playgroud)

但是,当我手动粘贴并执行时,整个create_site_db.sql在查询日志中展开,并显示该文件中的所有sql查询.

我在这里错过了mysqldb如何查询的内容吗?我遇到了限制吗?我的目标是运行一个sql脚本来创建模式结构,但我不想在shell进程中调用mysql来获取sql文件.

有什么想法吗?谢谢!

YOU*_*YOU 12

正如其他人所说,你不能source在MySQLdb Python API中使用该命令

因此,不是运行它,而是加载文件并执行它

让我们说你的.sql文件了

create database test;
Run Code Online (Sandbox Code Playgroud)

阅读内容,如

sql=open("test.sql").read()
Run Code Online (Sandbox Code Playgroud)

然后执行它

cursor.execute(sql);
Run Code Online (Sandbox Code Playgroud)

你会得到新的数据库"测试"


Bil*_*win 7

source命令是仅由mysql命令行客户端识别的内置命令之一.它不支持作为您可以通过任何API执行的语句.

有些人认为您可以简单地在" ;"语句终止符上拆分SQL脚本文件,并调用execute()您获得的每一行.但是有很多例外情况:

  • 所陈述的内置命令CONNECT,SOURCE,CHARSET,WARNINGS,QUIT,等.
  • 请注意,内置命令不需要;例如终止DELIMITER.
  • 包含;但不作为终结符的语句,如CREATE TRIGGER.
  • 包含;内部字符串文字或注释或甚至带引号的标识符的语句.
  • 评论行.

要以编程方式加载SQL脚本,您必须复制相当数量的mysql客户端功能.因此,最好只使用脚本作为输入来分叉进程以实际执行该客户端程序.

也可以看看: