pyodbc 插入语句获取错误消息

pyodbc insert statement gets error message

我正在尝试使用 python 将值插入 SQL 服务器。 我写了我的 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 程序中运行良好。 有没有人有解决这个错误的想法? 非常感谢。

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

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)