如何在Python中处理多行SQL语句

时间:2017-05-26 12:25:21

标签: python sql

我正在使用pypyodbc连接到我的SQL2014服务器,我有以下查询要执行。但是,它给出了我的错误消息:

  

pypyodbc.ProgrammingError:(u'42S22',u“[42S22] [Microsoft] [SQL Server   Native Client 11.0] [SQL Server]列名'2017-02-07'无效。“)

我可以在服务器上运行我的SQL查询而没有任何问题。 我想知道包含长sql语句并执行它的正确方法是什么?

Python代码:

result = cursor.execute('''
    declare @date date ="2017-02-07",
        @env varchar (10)= "TEST",
        @runid int,
        @val smallint,
        @timelen int,
        @interface varchar(30),
        @table_t varchar(30),
        @del_t int,
        @upd_t int,
        @ins_t int

    declare @import_test TABLE
    (RUN_DATE date,
     ENV varchar(10),
     ID int,
     [CHECK] varchar (100),
     CODE varchar(30),
     TABLE_NAME varchar(30),
     VAL_1 int,
     VAL_2 int,
     VAL_3 int )

    set @val=(select count(*) from MY_TABLE where convert(date,[timestamp])=@date and msg_cd="OK")

    insert into @import_test values (@date,@env,null,"Check 1 (count of OK codes)",null,null,@val,null,null)

    select * from @import_test

    ''')
for row in result:
    print(row)

1 个答案:

答案 0 :(得分:0)

在MSSQL中,双引号括起来的字符串被解释为列名。您需要在SQL查询中使用双引号作为Python多行字符串和环绕字符串,并带有单引号。

尝试:

result = cursor.execute("""
declare @date date ='2017-02-07',
    @env varchar (10)= 'TEST',
    @runid int,
    @val smallint,
    @timelen int,
    @interface varchar(30),
    @table_t varchar(30),
    @del_t int,
    @upd_t int,
    @ins_t int
...
""")