【问题标题】:GUI text entry field is not being inserted in SQL database未在 SQL 数据库中插入 GUI 文本输入字段
【发布时间】:2019-12-08 14:57:55
【问题描述】:

我正在尝试将文本输入字段中的输入获取到 SQL 中的表中。但是,当我插入该值时,我的数据库中看不到任何结果。我没有收到任何错误,所以我似乎找不到错误。

    #place the text entry fields

    global firstname
    global lastname
    global mark__
    global targetgrade

    firstname = Entry(self, width = 15, bg = "white")
    firstname.grid(row = 1, column=1, padx =5, pady = 5)

    lastname = Entry(self, width = 15, bg = "white")
    lastname.grid(row = 2, column=1, padx =5, pady = 5)

    mark__ = Entry(self, width = 15, bg = "white")
    mark__.grid(row = 3, column=1, padx =5, pady = 5)

    targetgrade = Entry(self, width = 15, bg = "white")
    targetgrade.grid(row = 4, column=1, padx =5, pady = 5)


    #Buttons to navigate


    button1 = tk.Button(self, text = "Submit",
                        command = lambda:controller.show_frame(Submit) )

    button1.grid(row = 8 , column= 0)

    button2 = tk.Button(self, text = "Proceed",
                        command = lambda:controller.show_frame(ProceedToAnalysis) )
    button2.grid(row = 8, column = 1)

类提交(tk.Frame):

def __init__(self, parent, controller):
    tk.Frame.__init__(self,parent)
    label = tk.Label(self, text = "Entry Submitted", font = LARGE_FONT)
    label.grid(pady = 10, padx = 10)

    button1 = tk.Button(self, text = "Back to Home",
                        command = lambda:controller.show_frame(StartPage) )
    button1.grid(row = 8 , column= 0)

    button2 = tk.Button(self, text = "Proceed",
                        command = lambda:controller.show_frame(ProceedToAnalysis) )
    button2.grid(row = 8, column = 1)

    #inserting into database

    global firstname
    global lastname
    global mark__
    global targetgrade


    first = firstname.get()
    last= lastname.get()
    mark = mark__.get()
    target_grade = targetgrade.get()
    percentage =0
    grade = "Not yet declared"
    cur.execute("INSERT INTO class (first, last, mark, target_grade, percentage,grade) VALUES (?,?,?,?,?,?)",(first,last,mark,target_grade,percentage,grade))
    conn.commit() #inserting the values in the database

    firstname.delete(0,END) # clearing the entry after the user has inputted data
    lastname.delete(0,END)
    mark__.delete(0,END)
    targetgrade.delete(0,END)
    firstname.focus_set()

我已经完成了另一个版本,它具有相同功能的不太复杂的 tkinter 代码,并且似乎按应有的方式添加到数据库中。我对这段代码做了同样的事情,但它似乎不起作用。提前谢谢你:)

#my previous code which works

def submit():
    first = firstname.get()
    last= lastname.get()
    mark = mark__.get()
    target_grade = targetgrade.get()
    percentage =0
    grade = "Not yet declared"
    cur.execute("INSERT INTO class (first, last, mark, target_grade, percentage,grade) VALUES (?,?,?,?,?,?)",(first,last,mark,target_grade,percentage,grade))
    conn.commit() #inserting the values in the database
    ...

复制评论:我试过了

def insertintosql(first,last,mark,target_grade,percentage,grade): 
    with conn: 
        cur.execute("INSERT INTO class (first, last, mark, target_grade, percentage,grade) VALUES (?,?,?,?,?,?)",
                    (first,last,mark,target_grade,percentage,grade)
                    )

【问题讨论】:

  • 在def __init__ 中执行cur.execute(... 将不起作用,因为def __init__ 仅在实例化时执行一次。将其移至 own 函数,例如def insert(....
  • 我对这个很陌生,你介意给我一个先机吗?我试过 def insertintosql(first,last,mark,target_grade,percentage,grade): with conn: cur.execute("INSERT INTO class (first, last, mark, target_grade, percent,grade) VALUES (?,?, ?,?,?,?)",(first,last,mark,target_grade,percentage,grade))
  • 你被误导了,你的问题不是SQL声明。你不明白OOP __init__ 的工作原理。 请确认:您点击.Button(self, text = "Submit", 并期望def __init__ 中的.execute("INSERT ... 被执行。
  • 是的,应该是这样的

标签: python sql user-interface tkinter


【解决方案1】:

您可能希望将conn.commit() 语句更改为cur.commit() 语句以查看是否可行。如果是这样,则意味着您的连接定义没有利用自动提交,并且您需要显式提交插入。不过,不确定此代码与您更复杂的 tkinter 代码有什么不同。

【讨论】:

  • 好的 - 无需取消答案。只是想帮忙。我遇到过这种情况,我还必须通过 cur.execute 命令对数据库进行显式提交。您可能也想尝试一下。
  • @MikeWalton OP 没有足够的声誉来投票,所以请不要假设他们这样做了。 (我没有投票)
猜你喜欢
  • 2018-09-23
  • 1970-01-01
  • 2021-08-30
  • 2015-06-21
  • 2020-07-23
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多