簡體   English   中英

如何處理Python中的多行SQL語句

[英]How to handle multi-Line SQL Statement in Python

我正在使用 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)

在 MSSQL 中,用雙引號括起來的字符串被解釋為列名。 您需要對 Python 多行字符串使用雙引號,並將 SQL 查詢中的字符串用單引號括起來。

嘗試:

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
...
""")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM