【问题标题】:PYODBC error 07002 - Too few parametersPYODBC 错误 07002 - 参数太少
【发布时间】:2016-03-09 13:13:57
【问题描述】:

简而言之,此代码获取库存商品的数量,并通过添加来自 GUI 元素之一的数字来更新该值。每当我尝试运行以下代码时:

Change = self.ui.Modify_Stock_Screen_Change.text()
Change = int(Change)
DBConnect = pyodbc.connect('Driver={Microsoft Access Driver (*.mdb, *.accdb)}; Dbq=H:\\Computer Science\\X\\Y\\Z\\Database.accdb;')
DBSelect = DBConnect.cursor()
DBSelect.execute("select * from Stock where Stock_Item = ?", self.ui.Modify_Stock_Screen_Item.currentText())
TableRow= DBSelect.fetchone()
for Field in TableRow:
    CurrentQuantity = TableRow[1]
    CurrentQuantity = int(CurrentQuantity)
    UpdatedQuantity = int(CurrentQuantity + Change)
    DBSelect.execute('update Stock set Current_Quantity = UpdatedQuantity where Stock_Item = ?', self.ui.Modify_Stock_Screen_Item.currentText())
    DBConnect.commit()

我收到以下错误:

DBSelect.execute('update Stock set Current_Quantity = "UpdatedQuantity" where Stock_Item = ?', self.ui.Modify_Stock_Screen_Item.currentText())
pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2. (-3010) (SQLExecDirectW)')

【问题讨论】:

  • Access 在错误消息Too few parameters. Expected 2. 中要求输入2 个参数的事实表明您可能在update Stock set Current_Quantity = UpdatedQuantity where Stock_Item = ? 中拼错了列名。请检查Current_QuantityUpdatedQuantityStock_Item
  • @stephan 更新命令适用的列名是我的访问文件上的“Current_Quantity”,所以不可能是这样 - 我还拼写检查了这段代码中的每个变量并仔细检查了设计视图中的数据类型,所有这些都应该使命令能够继续。另外,我已经通读了代码并检查了所有的措辞/拼写,这一切似乎都是正确的——在每次更改后,我还快速将打印语句应用于每个变量,并且这些语句也会在更新之前产生正确的值数据库表。
  • 澄清一下:UpdatedQuantityStock 表中的列名,还是应该是您在 Python 中 DBSelect.execute 上方的代码行中定义的变量 UpdatedQuantity代码(而不是用户)?如果是后者,您的执行应该类似于DBSelect.execute('update Stock set Current_Quantity = ? where Stock_Item = ?', UpdatedQuantity, self.ui.Modify_Stock_Screen_Item.currentText())
  • @stephan 我更新了你所说的 - 现在产生了这个错误:DBSelect.execute('update Stock set Current_Quantity = ? where Stock_Item = ?', UpdatedQuantity, self.ui.Modify_Stock_Screen_Item.currentText()) pyodbc.Error: ('HYC00', '[HYC00] [Microsoft][ODBC Microsoft Access Driver]Optional feature not implemented (106) (SQLBindParameter)') 我假设这是我自己的访问权限,而不是代码
  • 很难从这里调试(特别是因为我对 Access 了解不多),但 odbc 中的 Optional feature not implemented 通常表示“数据库不支持的数据类型”。因此,我会检查您的 Python 代码中 self.ui.Modify_Stock_Screen_Item.currentText() 返回的数据类型,并将其与数据库预期的数据类型进行比较。

标签: python sql database ms-access pyodbc


【解决方案1】:

这里的问题是 Python 变量名称 UpdatedQuantity 包含在 SQL 命令文本中,但数据库引擎不知道这样的 Python 变量是否存在或它的值可能是什么。该变量需要包含在传递给查询的参数中:

sql = 'update Stock set Current_Quantity = ? where Stock_Item = ?'
params = (
    UpdatedQuantity, 
    self.ui.Modify_Stock_Screen_Item.currentText()
    )
DBSelect.execute(sql, params)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多