Python中执行sql脚本时GO语句出错问题

sql脚本:

--创建链接服务器 (其中db2server是DB2的ip地址或服务器名)
exec sp_addlinkedserver ‘srv_lnk‘, ‘‘, ‘SQLOLEDB‘,‘10.138.60.94‘
exec sp_addlinkedsrvlogin ‘srv_lnk‘,‘false‘,null,‘sa‘,‘123456‘
Go
--数据导入(表B存在)
--Insert into srv_lnk.sys.Estamp.EstampConfig(field1,field2)
INSERT INTO srv_lnk.[PostLoan].[dbo].[TestReport]
([DBVersion]
,[CodeLines]
,[Duration]
,[LastDate]
,[Summary]
,[Amount]
,[SuccessAmount]
,[FailAmount]
,[BugAmount]
,[Remark])
SELECT
[DBVersion]
,[CodeLines]
,[Duration]
,[LastDate]
,[Summary]
,[Amount]
,[SuccessAmount]
,[FailAmount]
,[BugAmount]
,[Remark]
FROM [PostLoan].[dbo].[TestReport]
--数据导入(表B不存在)
--SELECT value1,value2 into srv_lnk.DB2.dbo.B
--from DB1.dbo.A

--关闭连接
exec sp_dropserver ‘srv_lnk‘,‘droplogins‘

直接利用Python中的pymssql库执行以上脚本的时候,会报错:“Incorrect syntax near ‘Go‘.DB-Lib error message 20018, severity 15”。这是因为GO不是sql中的关键字。

这时可以利用python中的os.system+sqlcmd执行sql脚本,方法如下:

import os os.system("sqlcmd -S localhost -U sa -P 123456 -d TRAINING -i \"d:\\sql\\tmp.txt\"")

sqlcmd命令参数说明:

-S:表示数据库服务器地址,如localhost

-U:用户名,如sa

-P: 密码,如123456

-d:数据库名,如TRAINING

-i:文件路径,如文件存放在d:\sql\tmp.txt, 需要写成这样 \"d:\\sql\\tmp.txt\"

路径书写需要注意下。路径用双引号"file_path",外面已经有双引号了,需要转义。因为是在windows系统,路径用反斜杠,也需要转义下。

参考地址:https://my.oschina.net/shong/blog/768394

时间: 2024-10-10 01:36:02

Python中执行sql脚本时GO语句出错问题的相关文章

.net(C#)在Access数据库中执行sql脚本

自己写的一个工具类,主要是业务场景的需要. 主要有两个功能: ①执行包含sql语句的字符串 ②执行包含sql语句的文件 调用方式 1 /// <summary> 2 /// 执行sql语句 3 /// </summary> 4 /// <param name="sql">需要执行的sql语句</param> 5 public bool ExecuteSql(string sql, ref string errorMsg) 6 { 7 Se

InstallShield在MySQL和Oracle中执行SQL脚本的方法InstallShield在MySQL和Oracle中执行SQL脚本的方法

简述 InstallShield已经内建了对MySQL和Oracle的支持.但是这个功能是通过ODBC实现的,它对SQL脚本的格式要求非常严格,因此已经通过官方客户端测试的脚本在IS中执行时往往就会报错. 一般来说,数据库脚本只保证通过官方客户端测试即可,同时维护一份供IS执行的脚本费时费力.因此,考虑安装程序对两数据库的支持通过官方客户端实现. MySQL   function InstallMySQLComponent(szComponent) NUMBER nResult; STRING

2016.1.23 通过cmd在程序中执行sql脚本

System.Diagnostics.Process pro = new System.Diagnostics.Process(); pro.StartInfo.FileName = "cmd.exe"; pro.StartInfo.UseShellExecute = false; pro.StartInfo.RedirectStandardInput = true; pro.StartInfo.RedirectStandardOutput = true; pro.StartInfo.

Shell脚本中执行sql语句操作

这篇文章主要介绍了Shell脚本中执行sql语句操作mysql的5种方法,本文讲解了将SQL语句直接嵌入到shell脚本文件中.命令行调用单独的SQL文件.使用管道符调用SQL文件等方法,需要的朋友可以参考下 对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的结果美化,需要进一步完善和调整.以下为具体的示例及其方法. 1.将SQL语句直接嵌入到sh

PDO中执行SQL语句的三种方法

在PDO中,我们可以使用三种方式来执行SQL语句,分别是 exec()方法,query方法,以及预处理语句prepare()和execute()方法~大理石构件来图加工 在上一篇文章<使用PDO构造函数连接数据库及DSN详解>中,我们介绍了如何使用构造函数连接数据库和DSN的详解,那么我们这篇文章跟大家介绍在PDO中执行SQL语句的三种方式,下面我们将一一介绍! 第一种方法:exec()方法 exec()方法返回执行SQL 语句后受影响的行数,其语法格式如下: 1 int PDO::exec(

shell中创建mysql库和执行sql脚本

以前执行oracle脚本都是放到plsql中执行 mysql 脚本执行: (1).先创建一个worlddb库 (2).导入sql脚本: 这就ok啦,哈哈.

在phpmyadmin中执行sql语句出现的错误:Unknown storage engine &#39;InnoDB&#39;

在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB' 解决方法:解决方法:             1.关闭MySQL数据库       2.修改my.ini文件,把skip-innodb这行注释掉       3.打开MySQL数据库 原因:没有开启MySQL InnoDB存储引擎. 在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB'

Delphi 7 在程序中直接执行SQL脚本文件

Delphi 7 在程序中直接执行SQL脚本文件 在处理MSDE一些操作中.需要执行一些SQL脚本.有的是从SQLServer 2000中生成的SQL为后缀的脚本.在MSDE中没有企业管理器,操作都是在程序中完成的.所以用以下函数来执行SQL脚本. //执行一个SQL角本文件,文件只能是ANSI编码的.//如果文件是UNICODE编码的话,则会乱码.var  s:string;  sqltext : string;  sqlfile : TextFile;begin  if OpenDialog

EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值

一: 执行sql语句,返回受影响的行数 在mysql里面,如果没有影响,那么返回行数为  -1 ,sqlserver 里面  还没有测试过 using (var ctx = new MyDbContext()) { ctx.Database.ExecuteSqlCommand("UPDATE Person SET Name = 'Michael' WHERE PersonID = 1"); } 二 : Database.SqlQuery<T>   EF5执行sql查询语句