如何修复'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”属性。您是说:“种子”吗?