【问题标题】:InterfaceError: Error binding parameter 0 probably unsupported typeInterfaceError:错误绑定参数 0 可能是不受支持的类型
【发布时间】:2018-08-24 15:59:24
【问题描述】:

我正在尝试使用选项菜单中的变量从数据库表中选择一个项目:

        c.execute("SELECT category_name FROM categories")
        llist = c.fetchall()        

        add_item_quan = Label(add_item_frame, text='الكمية ', bg='#d3e4ec', fg='#4422ee')
        add_item_quan.config(font='Aerial 12 bold')
        add_item_quan.grid(row=2, column=2, pady=10, padx=10)    

        item_cat = StringVar()
        add_item_cat_list_name = OptionMenu(add_item_frame, item_cat, *llist)
        add_item_cat_list_name.config(width=50, fg='white', bg='#4422ee')
        add_item_cat_list_name.grid(row=4, column=1)


        def add_new_item():
            c.execute("SELECT id FROM categories WHERE category_name = (?)", (item_cat, ))
            item_cat_id = c.fetchall()
            c.execute("SELECT category_name FROM categories WHERE id = (?) ", (item_cat_id, ))
            item_categ = c.fetchall()
            item_name = itemsname.get()
            itemsquan = int(itemsquan1)
            item_quant = itemsquan
            c.execute("INSERT INTO items (item_name, quan, item_category VALUES (?, ?, ?)",
                      (item_name, item_quant, item_categ, ))

        add_item_button = Button(add_item_frame, text='مــوافــق', fg='white', bg='#4422ee',                          command=add_new_item)
        add_item_button.grid(row=1, pady=10, padx=10)

每次它给我错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1541, in __call__
return self.func(*args)
File "G:/Python/warehouse/main.py", line 126, in add_new_item
c.execute("SELECT category_name FROM categories WHERE id = (?) ", 
(item_cat_id, ))
InterfaceError: Error binding parameter 0 - probably unsupported type.

数据库采用文本和整数作为数据类型:

CREATE TABLE `items` (
`id`    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`item_name` TEXT NOT NULL,
`quan`  INTEGER NOT NULL,
`item_category` TEXT
);

其他解决方案告诉要更改每个 var 中的文本类型以适应数据库,但它不起作用,我尝试如下:

        def add_new_item():
        c.execute("SELECT id FROM categories WHERE category_name = (?)", (str(item_cat), ))
        item_cat_id = c.fetchall()
        c.execute("SELECT category_name FROM categories WHERE id = (?) ", (int(item_cat_id), ))
        item_categ = c.fetchall()
        item_name = itemsname.get()
        itemsquan = int(itemsquan1)
        item_quant = itemsquan
        c.execute("INSERT INTO items (item_name, quan, item_category VALUES (?, ?, ?)",
                  (str(item_name), int(item_quant), str(item_categ), ))

然后它又给了我同样的错误

【问题讨论】:

  • 完成,请检查问题的更新部分

标签: python tkinter sqlite


【解决方案1】:

item_cat_id 是第一个fetchall() 的结果,因此是一个元组列表。 Sqlite 不知道如何处理。

您可以使用 fetchone() 和索引来获取实际 ID 并将其传入:

c.execute("SELECT id FROM categories WHERE category_name = (?)", (item_cat, ))
item_cat_id = c.fetchone()[0]

但是,很难理解您为什么要进行这些查询。您首先询问具有特定名称的类别的 ID,然后询问具有该返回 ID 的类别的名称。不出意外,你会找回你开始的名字,这似乎有点没有意义。

【讨论】:

  • 首先感谢您的回答,,, 这样做的原因是类别名称在用户界面中是可编辑的,我想使用 id 将名称绑定到另一个表,以便每当它们更改时类别名称不影响其他表格,特别是在报告中
  • 这些都没有意义。 item_categ,一旦你解决了类型问题,将与item_cat完全一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
相关资源
最近更新 更多