【问题标题】:Taking data from user and saving it in database从用户那里获取数据并将其保存在数据库中
【发布时间】:2020-03-03 21:57:34
【问题描述】:

我正在尝试从用户那里获取数据并将其插入到我的数据库中。一切正常,直到我点击“保存”按钮。然后我得到了那些错误:

Tkinter 回调异常 回溯(最近一次通话最后): call 中的文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/init.py”,第 1705 行 返回 self.func(*args) 文件“/Users/alidemirkazik/PycharmProjects/GUI_Test/GUI_Test.py”,第 51 行,在 add_customer mycursor.execute(sql, val) 文件“/Users/alidemirkazik/PycharmProjects/GUI_Test/venv/lib/python3.7/site-packages/mysql/connector/cursor.py”,第 551 行,在执行 self._handle_result(self._connection.cmd_query(stmt)) 文件“/Users/alidemirkazik/PycharmProjects/GUI_Test/venv/lib/python3.7/site-packages/mysql/connector/connection.py”,第 490 行,在 cmd_query 结果 = self._handle_result(self._send_cmd(ServerCmd.QUERY, query)) _handle_result 中的文件“/Users/alidemirkazik/PycharmProjects/GUI_Test/venv/lib/python3.7/site-packages/mysql/connector/connection.py”,第 395 行 引发errors.get_exception(数据包) mysql.connector.errors.DatabaseError: 1366 (HY000): Incorrect integer value: '' for column 'ID' at row 1

如果有人可以帮助我,不胜感激。谢谢!

r = Tk()
r.title('Adding New Customer')
r.geometry("175x62")


def quit():
    r.destroy()


def contact():
    contact_window = Toplevel(r)
    Label(contact_window, text='ID').grid(row=0)
    Label(contact_window, text='Name').grid(row=1)
    Label(contact_window, text='Address').grid(row=2)
    Label(contact_window, text='Country').grid(row=3)
    Label(contact_window, text='Age').grid(row=4)
    input1 = Entry(contact_window)
    input2 = Entry(contact_window)
    input3 = Entry(contact_window)
    input4 = Entry(contact_window)
    input5 = Entry(contact_window)
    input1.grid(row=0, column=1)
    input2.grid(row=1, column=1)
    input3.grid(row=2, column=1)
    input4.grid(row=3, column=1)
    input5.grid(row=4, column=1)

    first_id = input1.get()
    first_name = input2.get()
    first_address = input3.get()
    first_country = input4.get()
    first_age = input5.get()

    def add_customer():
        mycursor = mydb.cursor()
        sql = "INSERT INTO customers (ID, Name, Address, Country, Age) VALUES (%s, %s, %s, %s, %s)"
        val = (first_id, first_name, first_address, first_country, first_age)
        mycursor.execute(sql, val)
        mydb.commit()

    button3 = Button(contact_window, text="Save", command=add_customer)
    button3.grid(row=5, column=1)


button1 = Button(r, text="Contact", command=contact).pack(fill=X, ipady=5)
button2 = Button(r, text="Exit", command=quit).pack(fill=X, ipady=5)

r.mainloop()

【问题讨论】:

    标签: python mysql tkinter


    【解决方案1】:

    看起来您要添加的 ID 不是整数,这是数据库中预期的类型。

    我认为您只需要将 first_id 转换为整数。所以,类似的事情:

    val = (int(first_id), first_name, first_address, first_country, first_age)
    

    此外,我认为允许最终用户输入数据库的 ID 并不是一个好主意。我建议您让数据库以增量方式自动填充新条目的 ID。

    【讨论】:

    • 我稍后会编辑它。无论如何,我仍然必须为“年龄”字段添加一个整数值。我尝试了你的方法,但是我仍然收到一个错误,即:文件“/Users/alidemirkazik/PycharmProjects/GUI_Test/GUI_Test.py”,第 47 行,在 add_customer val = (int(first_id), first_name, first_address, first_country, int (first_age)) ValueError: int() 以 10 为底的无效文字:''
    • 这是因为您在 first_id 上输入的值不是有效的 int。检查此线程:stackoverflow.com/a/8948303/1130381 我建议仔细检查您在 first_id 上输入的值,并验证输入,因为您只能接受整数字段。
    【解决方案2】:

    在这一行中,您似乎在告诉它期待 VALUES 中第一个值的字符串

    sql = "INSERT INTO customers (ID, Name, Address, Country, Age) VALUES (%s, %s, %s, %s, %s)"
    

    在适当的地方用这个替换成整数格式的占位符

    sql = "INSERT INTO customers (ID, Name, Address, Country, Age) VALUES (%d, %s, %s, %s, %d)"
    

    “ID”本身也可能有问题,我提到这一点是因为它在错误 sn-p 中显示“不正确的整数值”。当需要一个整数本身时,它总是说(至少对我来说)“[x] 的意外(字符串/类型),预期的整数。”或“得到字符串,预期 int”

    我还认为您需要为输入字段初始化文本变量。看起来您正在使用通配符导入,我会将 tkinter 库导入为 tk 以帮助跟踪调试目的。但这只是我的偏好。

    import tkinter as tk #for python 3
    
    #for each entry/variable
    f_id = tk.StringVar()
    input1 = tk.Entry(contact_window, textvariable = f_id) 
    first_id = int(input1.get()) #int() when needed
    

    【讨论】:

      猜你喜欢
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2020-04-15
      • 2015-05-22
      • 2021-12-31
      • 1970-01-01
      相关资源
      最近更新 更多