pyodbc insert语句获取错误消息

2024-10-01 09:39:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python将值插入SQL SERVER。 我编写了python程序,如下所示

import pyodbc
import subprocess
cnx = pyodbc.connect("DSN=myDSN;UID=myUID;PWD=myPassword;port=1433")
runcmd1 = subprocess.check_output(["usbrh", "-t"])[0:5]
runcmd2 = subprocess.check_output(["usbrh", "-h"])[0:5]
cursor = cnx.cursor()
cursor.execute("SELECT * FROM T_TABLE-A;")
cursor.execute('''
                INSERT INTO T_TABLE-A (TEMP,RH,DATE,COMPNAME)
                VALUES
                (runcmd1,runcmd2,GETDATE(),'TEST_Py')
                ''')
cnx.commit()

然后得到如下所示的错误

# python inserttest.py
Traceback (most recent call last):
  File "inserttest.py", line 13, in <module>
    ''')
pyodbc.ProgrammingError: ('42S22', "[42S22] [FreeTDS][SQL Server]Invalid column name 'runcmd1'. (207) (SQLExecDirectW)")

如果我像下面这样写,可以插入

import pyodbc
cnx = pyodbc.connect("DSN=myDSN;UID=myUID;PWD=myPassword;port=1433")
cursor = cnx.cursor()
cursor.execute("SELECT * FROM T_TABLE-A;")
cursor.execute('''
                INSERT INTO T_TABLE-A (TEMP,RH,DATE,COMPNAME)
                VALUES
                (20.54,56.20,GETDATE(),'TEST_P')
                ''')
cnx.commit()

命令USBRH-t获取温度,USBRH-h获取湿度。它们在单独的python程序中运行良好。 有人有办法解决这个错误吗? 先谢谢你


Tags: import程序executesqluidconnecttablecursor
2条回答

检查从这两行返回的数据类型

runcmd1 = subprocess.check_output(["usbrh", "-t"])[0:5]
runcmd2 = subprocess.check_output(["usbrh", "-h"])[0:5]

runcmd1runcmd2应为“double”数据类型,因为它接受20.54

cursor.execute('''
                INSERT INTO T_TABLE-A (TEMP,RH,DATE,COMPNAME)
                VALUES
                (runcmd1,runcmd2,GETDATE(),'TEST_Py')
                ''')

不会工作,因为您正在嵌入Python变量的名称,而不是它们的。你需要做什么

sql = """\
INSERT INTO T_TABLE-A (TEMP,RH,DATE,COMPNAME)
VALUES
(?, ?, GETDATE(),'TEST_Py')
"""
cursor.execute(sql, runcmd1, runcmd2)

相关问题 更多 >