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

标签 python mysql database tkinter mysql-python

我是 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 窗口中,但是当我选择“添加项目”按钮时,出现此错误:

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() 

最佳答案

您必须在查询中使用参数标记,否则您的数据库驱动程序(在本例中为 MySQL Connector/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。

关于python - 如何修复 'MySQLConverter' 对象没有库存输入的属性 '_entry_to_mysql',python-mysql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21793446/

相关文章:

database - 数据库表中的排序列

sql-server - 如何使用 ETL 管理身份?

python - 如何在 keras 中连接两个预训练模型?

MySQL:即使没有记录也选择一个范围内的所有日期

Python:ax.text 不显示在保存的 PDF 中

mysql - MySQL 的 ADO.NET 数据服务

mysql - EF6 MySQL : Update-Database -Script generates SQL without semicolon

java - 确保数据库中每个用户、每个页面的单次投票

php - 通过终端和通过 PHP 调用 python 脚本之间的区别?错误在哪里?

python - 使用 .to_json 将数据帧转换为 JSON 会弄乱日期时间数据