如何检查Python SQL查询结果并相应更新

时间:2017-05-11 17:51:18

标签: python sql sql-server python-3.x tkinter

单击按钮,将运行SQL查询,SQL行将更新我的Tkinter Entry行。 除非新的SQL查询产生足够的行来填充我的Tkinter Entry行,否则所有行都不会删除或重置。

如果SQL查询只生成1个名称,则只有self.output0将使用新的SQL数据重置。

如果SQL查询只生成2个名称,则只有self.output0 AND self.output1将使用新的SQL数据重置。

如果SQL查询产生10个名称,则self.output0 THROUGH self.output10将使用新的SQL数据重置。

我想让每个按钮点击都重置所有Tkinter Entrys。如果特定行没有SQL输出,则Tkinter Entry行应显示为空白。

关于如何检查SQL并使其正确更新的任何想法?

更新结果应该包含行数的元组。所以我想我需要检查结果是否小于10.如果是,那么我需要取余数并使用Tkinter删除与剩余数字相关的行。

Tkinter目前正在更新所有行,无论如何。如果SQL没有提供新行,由于某种原因,Tkinter将从旧查询中提取数据。

    import os
    import pypyodbc
    import tkinter
    from tkinter import ttk
    from tkinter import messagebox
    from tkinter import BOTH, END, LEFT


    class Adder(ttk.Frame):
    """The adders gui and functions."""
    def __init__(self, parent, *args, **kwargs):
        ttk.Frame.__init__(self, parent, *args, **kwargs)
        self.root = parent
        self.init_gui()

    def calculate(self):
        firstname = str(self.first_entry.get())
        lastname = str(self.last_entry.get())     
        license = str(self.lic_entry.get())
        if (firstname and not lastname and not license):  # "You entered first name."

           try:
                connection = pypyodbc.connect('Driver={SQL Server};Server=MYSERVER;Database=MYDATABASE;Trusted_Connection=yes;')
            except pypyodbc.Error as ex:
                sqlstate = ex.args[0]
                if sqlstate == '28000':
                    self.answer_label['text'] = "You do not have access." 
            cursor = connection.cursor() 
            SQLCommand = ("SELECT LASTNAME, FIRSTNAME, L_LICNUMBER "      
                "FROM dbo.My_table "   # table name
                "with (nolock)"
                "WHERE FIRSTNAME = ?")
            Values = [firstname]
            cursor.execute(SQLCommand,Values)
            results = cursor.fetchmany(20)
            if results:


                self.output0.delete(0, END)
                self.output0.insert(0,results[0])
                self.output1.delete(0, END)
                self.output1.insert(0,results[1])
                self.output2.delete(0, END)
                self.output2.insert(0,results[2])
                self.output3.delete(0, END)
                self.output3.insert(0,results[3])
                self.output4.delete(0, END)
                self.output4.insert(0,results[4])
                self.output5.delete(0, END)
                self.output5.insert(0,results[5])
                self.output6.delete(0, END)
                self.output6.insert(0,results[6])
                self.output7.delete(0, END)
                self.output7.insert(0,results[7])
                self.output8.delete(0, END)
                self.output8.insert(0,results[8])
                self.output9.delete(0, END)
                self.output9.insert(0,results[9])
                connection.close()

    def init_gui(self):
        """Builds GUI."""

        self.root.option_add('*tearOff', 'FALSE')

        self.grid(column=0, row=0, sticky='nsew') # this starts the entire form


        # Input Boxes and Button

        self.first_entry = tkinter.Entry(self, width=28) # first input box
        self.first_entry.grid(sticky='', column=1, row=1) 

        self.last_entry = tkinter.Entry(self, width=28) # second input box
        self.last_entry.grid(sticky='', column=2, row=1) 

        self.lic_entry = tkinter.Entry(self, width=28) # third input box
        self.lic_entry.grid(sticky='', column=3, row=1) 


        self.calc_button = ttk.Button(self, text='Search', command=self.calculate) # button
        self.calc_button.grid(column=4, row=1, columnspan=1, sticky='w', padx=14)

        # Output frame for answers

        self.output0 = tkinter.Entry(self, width=150, bd=0,)
        self.output0.grid(column=0, row=6, columnspan=5, padx=100, pady=0)
        self.output1 = tkinter.Entry(self, width=150, bd=0,)
        self.output1.grid(column=0, row=7, columnspan=5, padx=100, pady=0)
        self.output2 = tkinter.Entry(self, width=150, bd=0,)
        self.output2.grid(column=0, row=8, columnspan=5, padx=100, pady=0)
        self.output3 = tkinter.Entry(self, width=150, bd=0,)
        self.output3.grid(column=0, row=9, columnspan=5, padx=100, pady=0)
        self.output4 = tkinter.Entry(self, width=150, bd=0,)
        self.output4.grid(column=0, row=10, columnspan=5, padx=100, pady=0)
        self.output5 = tkinter.Entry(self, width=150, bd=0,)
        self.output5.grid(column=0, row=11, columnspan=5, padx=100, pady=0)
        self.output6 = tkinter.Entry(self, width=150, bd=0,)
        self.output6.grid(column=0, row=12, columnspan=5, padx=100, pady=0)
        self.output7 = tkinter.Entry(self, width=150, bd=0,)
        self.output7.grid(column=0, row=13, columnspan=5, padx=100, pady=0)
        self.output8 = tkinter.Entry(self, width=150, bd=0,)
        self.output8.grid(column=0, row=14, columnspan=5, padx=100, pady=0)
        self.output9 = tkinter.Entry(self, width=150, bd=0,)
        self.output9.grid(column=0, row=15, columnspan=5, padx=100, pady=0)       


    if __name__ == '__main__':
    root = tkinter.Tk()
    Adder(root)
    root.resizable(width=False, height=False) # locks window from being resized
    root.mainloop()

该按钮仅重置当前SQL查询更改的特定行数。

0 个答案:

没有答案