首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用模块使MySQL源查询工作

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

Stack Overflow用户
提问于 2009-12-19 07:52:15
回答 5查看 4.7K关注 0票数 6

我有以下代码行:

代码语言:javascript
复制
sql = "source C:\\My Dropbox\\workspace\\projects\\hosted_inv\\create_site_db.sql"
cursor.execute (sql)

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

错误1064:您的SQL语法出现了错误;请检查与您的MySQL服务器版本对应的手册,以便在第1行使用接近“源C:\My”的正确语法。

现在,我可以将以下内容作为查询复制并通过mysql:

代码语言:javascript
复制
source C:\\My Dropbox\\workspace\\projects\\hosted_inv\\create_site_db.sql

而且效果很好。当我检查我的脚本执行的查询的查询日志时,它会显示我的查询如下:

代码语言:javascript
复制
source C:\\My Dropbox\\workspace\\projects\\hosted_inv\\create_site_db.sql

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

在mysqldb如何执行查询方面,我是不是遗漏了什么?我是不是遇到了一个限制。我的目标是运行一个sql脚本来创建模式结构,但是我不想在shell进程中调用mysql来获取sql文件。

有什么想法吗?谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-19 08:27:17

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

因此,与其运行该文件,不如加载文件并执行它。

让我们假设您的.sql文件

代码语言:javascript
复制
create database test;

阅读内容如下

代码语言:javascript
复制
sql=open("test.sql").read()

然后执行

代码语言:javascript
复制
cursor.execute(sql);

您将获得新的数据库“测试”。

票数 13
EN

Stack Overflow用户

发布于 2009-12-19 08:07:37

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

有些人认为您可以在";“语句结束符上拆分一个SQL脚本文件,并在得到的每一行上调用execute()。但有许多例外情况:

  • 内置命令语句,如CONNECTSOURCECHARSETWARNINGSQUIT等。
  • 注意,内置命令不需要在;中终止,例如DELIMITER
  • 包含;但不是作为终止符的语句,如CREATE TRIGGER
  • 语句,在字符串文本或注释中包含;,甚至引用标识符。
  • 评论行。

要以编程方式加载SQL脚本,您必须复制mysql客户端的大量功能。所以最好是分叉一个进程,以脚本作为输入来实际执行那个客户端程序。

另请参阅:

票数 8
EN

Stack Overflow用户

发布于 2009-12-19 07:57:55

“‘source”不是SQL命令,而是mysql命令行客户端的内部命令。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1932298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档