SQL 包含 0 个参数标记,但提供了 5 个参数

问题描述 投票:0回答:1

我正在尝试使用 pyodbc 驱动程序将数据插入到 4D 数据库中。我能够连接并获取之前使用相同格式插入的数据。这是代码:

#Connection string
class Database():
    def __init__(self):
        self.conn = pyodbc.connect('DRIVER={4d v20 ODBC Driver 64-bit};SERVER=127.0.0.1;UID=Designer;PWD=123456') # This works
        self.curs = self.conn.cursor()



#Function
feed_analysis_data = (data.dateArrivedLab, user_id, data.labAnalysisID, data.feedName, data.harvestDate)
        
        
        sql_query = "INSERT INTO feed_analysis (date, user_id, lab_analysis_id, feed_name, date_harvested) VALUES (?, ?, ?, ?, ?)"
        try:
            self.curs.execute(sql_query, feed_analysis_data)
        except Exception as e:
            print("Error executing SQL query:", e)

我已经检查了插入的数据,所有参数都在那里。

我尝试使用 %s, ?, '?', :1... 作为参数标记,但我仍然收到相同的错误消息:执行 SQL 查询时出错:('SQL 包含 0 个参数标记,但提供了 5 个参数', 'HY000')

我已经在网上和这里进行了搜索,但是我发现的任何东西都不适合我遇到的情况。任何见解将不胜感激。

python sql pyodbc 4d
1个回答
-2
投票

此错误消息表明您的 SQL 语句与您尝试向其提供数据的方式不匹配。这是发生的事情:

SQL 语句:您的 SQL 语句没有任何用于注入值的占位符(?)。这些占位符称为参数标记。 参数:您尝试向 SQL 语句提供 5 个单独的值(参数)。 存在断开连接,因为 SQL 语句不需要任何单独的值。

这里有两种方法可以解决这个问题:

修改SQL语句:

在 SQL 语句中想要插入提供的值的位置包含参数标记 (?)。 例如,不要使用 INSERT INTO table_name (column1, column2, column3) VALUES ('value1', 'value2', 'value3'),而是使用 INSERT INTO table_name (column1, column2, column3) VALUES (?, ?, ?) 删除额外参数:

如果您实际上不需要全部 5 个值,请修改代码以仅提供 SQL 语句期望的值数量。

问候 安吉特·阿迪卡里 https://www.vidyagyan.in

© www.soinside.com 2019 - 2024. All rights reserved.