• 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 mp.txt, 需要写成这样 "d:\sql\tmp.txt"

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

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

  • 相关阅读:
    深入理解Java Proxy机制
    StringBuilder与StringBuffer的区别
    反射
    list和set区别
    spring总结
    Hibernate与 MyBatis的比较
    手机拍照或选择照片上传html5代码
    JSP两种跳转
    离散化
    圆方树
  • 原文地址:https://www.cnblogs.com/sammy1989/p/6066769.html
Copyright © 2020-2023  润新知