如何修复'MySQLConverter'对象对于库存输入python-mysql没有属性'_entry_to_mysql'?

Posted

技术标签:

【中文标题】如何修复\'MySQLConverter\'对象对于库存输入python-mysql没有属性\'_entry_to_mysql\'?【英文标题】:How do I fix 'MySQLConverter' object has no attribute '_entry_to_mysql' for inventory input, python-mysql?如何修复'MySQLConverter'对象对于库存输入python-mysql没有属性'_entry_to_mysql'? 【发布时间】:2014-03-14 15:29:42 【问题描述】:

我对 Python 很陌生,但是对于一个团队设计项目,我需要创建一个代码来将信息输入到连接到 mysql 表的 Tkinter 窗口并相应地更新该表。如果再次输入相同的ID,它应该更新数量+1:

from Tkinter import*
import tkMessageBox
import tkFont
import mysql.connector
import time



def AddItem():
    print "Added Item"
    print "ID:" + ID.get()
    print "Item Name:" + ItemName.get()
    print "Price Per Item:" + PricePerItem.get()
    print "Manufacturer:" + Manufacturer.get()

s = INSERT INTO inventory... 让我陷入循环,我可以在 Tkinter 窗口中输入信息,但是当我选择 Add Item 按钮时,会出现此错误:

ProgrammingError:处理格式参数失败; 'MySQLConverter' 对象没有属性 '_entry_to_mysql'

    cnx = mysql.connector.connect(user='root',password='cj92cj',
                                  database='INVENTORY', use_unicode=False)
    s = "INSERT INTO inventory (ID, Manufacturer, ItemName, PricePerItem, Quantity) VALUES(,,,,1) ON DUPLICATE KEY UPDATE Quantity= Quantity + 1, Manufacturer = VALUES(Manufacturer), ItemName = VALUES(ItemName), PricePerItem = VALUES(PricePerItem);".format(ID.get(),Manufacturer.get(),ItemName.get(),PricePerItem.get())

    print ID.get()
    print s
    cursor = cnx.cursor()
    cursor.execute(s, (ID, Manufacturer, ItemName, PricePerItem, Quantity))
    cursor.close()
    cnx.commit()
    cnx.close()

def ClearEntries():
    ItemName.delete(0,END)
    PricePerItem.delete(0,END)
    Manufacturer.delete(0,END)

我已经用“s”尝试了好几个小时的各种事情,但我无法确定要使用的正确语法。

如果有帮助的话,下面是 Tkinter 窗口代码。

def InformationInput():
    BigFont=tkFont.Font(family="Arial", size=14, weight="bold")
    root.title("Enter Item Information") 
    root.geometry("1000x400")
    root.bind("<Return>", lambda event: AddItem())
    lbl1 = Label(root, text="ID:")
    lbl2 = Label(root, text="Item Name:") 
    lbl3 = Label(root, text="Price Per Item:")
    lbl4 = Label(root, text="Manufacturer:")
    lbl9 = Label(root, text="Enter Item Information", height=3, fg="red", font=BigFont)

    global ID, ItemName, PricePerItem, Manufacturer
    ID = Entry(root, width=25, textvariable=ID)
    ItemName = Entry(root, width=20, textvariable=ItemName) 
    PricePerItem = Entry(root, width=10, textvariable=PricePerItem) 
    Manufacturer = Entry(root, width=25, textvariable=Manufacturer)
    button1 = Button(root, text="Add Item", command=AddItem, width=15) 
    button2 = Button(root, text="Clear Entries", command=ClearEntries, width=15) 
    button3 = Button(root, text="Exit", command=root.destroy, width=15)

    lbl9.grid(column=2, row=1, columnspan=5) 
    lbl1.grid(column = 1, row = 4, sticky="nw") 
    ID.grid(column = 2, row = 4, sticky="nw") 
    lbl2.grid(column = 3, row = 4) 
    ItemName.grid(column = 4, row = 4) 
    lbl3.grid(column = 5, row = 4) 
    PricePerItem.grid(column = 6, row = 4, sticky="w")
    lbl4.grid(column = 3, row = 10)
    Manufacturer.grid(column = 4, row = 10)
    button1.grid(column=3, row=15, sticky="e", pady=20) 
    button2.grid(column=4, row=15) 
    button3.grid(column=5, row=15, sticky="w")



root = Tk()
ID = IntVar()
ItemName = StringVar() 
PricePerItem = IntVar() 
Manufacturer = StringVar() 
Quantity = IntVar()

InformationInput() 
root.mainloop() 

【问题讨论】:

【参考方案1】:

您必须在查询或数据库驱动程序中使用参数标记,在这种情况下,MySQL 连接器/Python 会出错。此外,您必须传递可以转换的值。 MySQLConverter 不知道如何转换 entry-objects,所以它告诉你它不能转换它(虽然它可以更明确一点)。

这是一个例子(简化):

s = ("INSERT INTO inventory (ID, Manufacturer, ItemName, PricePerItem, Quantity) "
     "VALUES (%s, %s, %s, %s, %s) ON DUP..")
cursor = cnx.cursor()
cursor.execute(s, (ID.get(), Manufacturer.get(), ItemName.get(),
                   PricePerItem.get(), Quantity.get()))

我冒昧opening a bug report 改进了错误消息。

其他备注:我觉得你插入的时候不需要提供ID?通常这是一个 AUTO_INCREMENT。

【讨论】:

以上是关于如何修复'MySQLConverter'对象对于库存输入python-mysql没有属性'_entry_to_mysql'?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 AttributeError:“Image”对象没有“seek”属性。您是说:“种子”吗?

提交后修复Mercurial存储库中的重命名

如何修复 Django:没有返回 HttpResponse 对象。它返回 None 而不是? [复制]

如何修复局部视图的视图模型

如何修复存储库的来源?

如何修复不可打包的 Git 存储库?