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

标签 python sql

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

pypyodbc.ProgrammingError: (u'42S22', u"[42S22] [Microsoft][SQL Server Native Cl ient 11.0][SQL Server]Invalid column name '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
...
""")

关于python - 如何在Python中处理多行SQL语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44201577/

相关文章:

python - 单元测试检查给定路径是否返回正确的上下文

Python 封闭函数

sql - Informix 7.3 中是否有用于测试字母或数字数据的内置函数?

mysql - 如何在订购后对查询进行分组?

c# - 在C#中执行SQL命令并将结果输出到DataGridView

sql - 排除 NULL 的 JOIN 字段上的匹配

python - 如何取消选择在kivy filechooser ListView 中选择的多个文件

python - Google Calendar API (Python) send_event_notifications 不发送电子邮件

Java:插入表日期时间数据

python - 编写了哪些 Python 库来演示函数式响应式编程?