如何修复“ TypeError:在mysql python中需要一个整数(类型为IntVar)”

问题描述 投票:0回答:2

我正在尝试在数据库表中插入日期。但是我得到了>

Traceback (most recent call last):
  File "D:\SchoolApp\Python\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "D:/SchoolApp/Python/register only.py", line 45, in register
    self.entry_birthday = datetime.datetime(self.birth_day)
TypeError: an integer is required (got type IntVar)

我将变量self.get_birthday转换为int(self.get_birthday),但这仍然是错误。

这是我的代码


import tkinter as tk
import pymysql
from tkinter import *
from tkinter import messagebox
import datetime

class Main(tk.Frame):
    def __init__(self, master, *args, **kwargs):
        tk.Frame.__init__(self, master, *args, **kwargs)
        self.master = master
        master.title("Thesis")

        self.register_button = Button(master, text="Register", command=self.register)
        self.register_button.pack()

        self.db = pymysql.connect(host = "localhost",user = "root",passwd = "",db = "database")
        self.cursor = self.db.cursor()
        self.QueryResident = "CREATE TABLE IF NOT EXISTS residence (BIRTH_DATE date, AGE varchar(255)not null)"
        self.cursor.execute(self.QueryResident)

    def registered(self,birth_day):
        self.get_birth_day =self.birth_day.get()

        if (self.get_birth_day == ""):
                messagebox.showerror("Error!","Please complete the required field")
        else:
            self.cursor.execute ("INSERT INTO residence (BIRTH_DATE) VALUES(%s)",(self.get_birth_day))

            self.db.commit()
            messagebox.showinfo("Success!","Registration successful")

        self.cursor.close()
        self.db.close()


    def register(self):
        self.master_register = Toplevel()

        self.birth_day = IntVar()

        self.label_birthday = Label(self.master_register, text = "Birth Day")
        self.label_birthday.pack()
        self.entry_birthday = Entry(self.master_register, textvariable = self.birth_day)
        self.entry_birthday = datetime.datetime(self.birth_day)
        self.entry_birthday.pack()
        self.button_submit = Button(self.master_register, text = "Submit", command = lambda: self.registered(self.birth_day))
        self.button_submit.pack()

我的预期输出是输入的日期,get将以任何日期格式存储到数据库中,并且我将根据给定的出生日期来计算年龄。

我正在尝试在数据库表中插入日期。但是我得到了Traceback(最近一次调用是最近一次):文件“ D:\ SchoolApp \ Python \ lib \ tkinter \ __ init__.py”,行1705,在__call__中返回self.func(* args)...

python tkinter pymysql
2个回答
-1
投票
此处进行了一些修改,希望对您有所帮助。基本上,您需要定义如何输入日期(因此,我选择一种格式yyyymmdd)。也最好以StringVar的形式输入。然后,在注册的方法中,将yyyymmdd解析为日期时间对象,然后可以将其放入数据库中。

-1
投票
self.birth_day

object

© www.soinside.com 2019 - 2024. All rights reserved.