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)
你会得到新的数据库"测试"
该source命令是仅由mysql命令行客户端识别的内置命令之一.它不支持作为您可以通过任何API执行的语句.
有些人认为您可以简单地在" ;"语句终止符上拆分SQL脚本文件,并调用execute()您获得的每一行.但是有很多例外情况:
CONNECT,SOURCE,CHARSET,WARNINGS,QUIT,等.;例如终止DELIMITER.;但不作为终结符的语句,如CREATE TRIGGER.;内部字符串文字或注释或甚至带引号的标识符的语句.要以编程方式加载SQL脚本,您必须复制相当数量的mysql客户端功能.因此,最好只使用脚本作为输入来分叉进程以实际执行该客户端程序.
也可以看看: