在Sqlite3数据库中插入Entry值

时间:2018-04-19 18:23:19

标签: python database sqlite user-interface tkinter

我正在使用tkinter创建货币转换器作为我的大学项目的一部分。我是python中GUI的新手。我正在尝试将用户在条目(此处为e1)中输入的值插入到我的 sqlite3 数据库(此处为con)的表中,但即使在完成后我也无法使其工作它就像他们在教程中展示它一样。我收到错误提供的绑定数量不正确。当前语句使用1,并且提供了0。似乎我错过了一些重要的东西。任何帮助将非常感激。谢谢!

from tkinter import*
import tkinter as tk
import sqlite3

conn=sqlite3.connect("datavalues.db")
c=conn.cursor()

root=tk.Tk()
tkvar=StringVar(root)
tkvar2=StringVar(root)
convertfrom={'USD', 'INR', 'YEN', 'Pound Sterling', 'CAD'}
tkvar.set('INR')
convertto={'USD', 'INR', 'YEN', 'Pound Sterling', 'CAD'}
tkvar2.set('USD')

class body(Frame):

    def __init__(self,master=None):
        Frame.__init__(self,master)
        self.master=master
        self.init_window()

    def init_window(self):
        self.master.title("Currency Converter")
        self.pack(fill=BOTH,expand=1)
        self.e1=tk.Entry(self)
        self.e2=tk.Entry(self)
        self.b1=tk.Button(self, text="Convert", command=self.data_entry)
        self.b1.pack()
        self.e1.pack()
        self.e2.pack()
        self.a=self.e1.get()
        self.e1.place(x=100,y=1)
        self.e2.place(x=100,y=100)
        popupmenu=OptionMenu(self,tkvar, *convertfrom)
        popupmenu2=OptionMenu(self,tkvar2,*convertto)
        popupmenu.place(x=2,y=1)
        popupmenu2.place(x=2,y=100)
        self.b1.place(x=150,y=150)

    def data_entry(self): #ERROR IN THIS FUNCTION
        c.execute("CREATE TABLE IF NOT EXISTS con(unix REAL)")
        c.execute("INSERT INTO con (unix) VALUES(?)",(self.a)) 
        conn.commit()
        conn.close()

root.geometry("400x300")
app=body(root)
root.mainloop()

1 个答案:

答案 0 :(得分:0)

原因可能是data_entry(self)为空。只需在SQL执行之前将设置self.a的行移动到def data_entry(self): #ERROR IN THIS FUNCTION self.a = self.e1.get() if len(self.a): c.execute("CREATE TABLE IF NOT EXISTS con(unix REAL)") c.execute("INSERT INTO con (unix) VALUES(?)",(self.a)) conn.commit() conn.close() else: print("Error, entry has no content") 方法中。这样,每次按下按钮都会读取条目。但你应该在那里放一个try块来确保self.a不是空的。

{{1}}