Silly me, I have corrected the wrong spelling of com & con. I don't think that it is any of the 14 because I created a mini version :- root = Tk() root.geometry("400x400") conn = sqlite3.connect('test.db') c = conn.cursor() ''' c.execute("""CREATE TABLE test ( name text, addx text, zip integar )""") ''' def submit(): conn = sqlite3.connect('test.db') c = conn.cursor() c.execute("INSERT INTO test VALUES (:namexx, :addxx, :zipxx)", { 'namexx': name.get(), 'addxx': addx.get(), 'zipxx': zipx.get() }) conn.commit() conn.close() name.delete(0, END) addx.delete(0, END) zipx.delete(0, END) name = Entry(root, width=30) name.grid(row=0, column=1, padx=20) addx = Entry(root, width=30) addx.grid(row=1, column=1, padx=20) zipx = Entry(root, width=30) zipx.grid(row=2, column=1, padx=20) name_label = Label(root, text="Name") name_label.grid(row=0, column=0) addx_label = Label(root, text="Address") addx_label.grid(row=1, column=0) zipx_label = Label(root, text="zipx") zipx_label.grid(row=2,column=0) but = Button(root, text="Add record", command=submit) but.grid(row=3, column=0, columnspan=2, padx=10, pady=10, ipadx=100) conn.commit() conn.close() root.mainloop() This works just fine. Cheers Michael