Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取sqlite和tkinter中的数据不匹配错误_Python_Sqlite - Fatal编程技术网

Python 获取sqlite和tkinter中的数据不匹配错误

Python 获取sqlite和tkinter中的数据不匹配错误,python,sqlite,Python,Sqlite,我正在用tkinter和sqlite3制作一个简单的联系簿。 它还没有完成。我得到了一个错误,我没有得到我以前的项目。 下面是我的代码: 后端: import sqlite3 def connect(): conn=sqlite3.connect("book.db") cur=conn.cursor() cur.execute("CREATE TABLE IF NOT EXISTS contact (name text, number in

我正在用tkinter和sqlite3制作一个简单的联系簿。 它还没有完成。我得到了一个错误,我没有得到我以前的项目。 下面是我的代码:

后端:

import sqlite3

def connect():
    conn=sqlite3.connect("book.db")
    cur=conn.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS contact (name text, number integer, id integer,email text)")
    conn.commit()

def view():
    conn=sqlite3.connect("book.db")
    cur=conn.cursor()
    cur.execute("SELECT * FROM contact")
    rows=cur.fetchall()
    conn.close()
    return rows

def search(name="", number="", email="", id=""):
    conn=sqlite3.connect("book.db")
    cur=conn.cursor()
    cur.execute("SELECT * FROM contact WHERE name=? OR number=? or email=? OR id=?",(name,number,email,id))
    rows=cur.fetchall()
    conn.close()
    return rows

def insert(name="", number="", email="", id=""):
    conn=sqlite3.connect("book.db")
    cur=conn.cursor()
    cur.execute("INSERT INTO contact VALUES(?,?,?,?)", (name,number,email,id))
    conn.commit()
    conn.close()

def update(name="", number="", email="", id=""):
    conn=sqlite3.connect("book.db")
    cur=conn.cursor()
    cur.execute("UPDATE contact SET name=?, number=?, email=? WHERE id=?",(name,number,email,id))
    conn.commit()
    conn.close()
def delete(id):
    conn=sqlite3.connect("book.db")
    cur=conn.cursor()
    cur.execute("DELETE FROM contact WHERE id=?",(id,))
    conn.commit()
    conn.close()


connect()
我的前端:

from tkinter import *
import webbrowser
import backend

def view_command():
    list1.delete(0,END)
    for row in backend.view():
        list1.insert(END,row)

def add_command():
    backend.insert(name_text.get(), contact_text.get(), email_text.get(),ID_text.get())
    list1.delete(0,END)
    for rows in backend.search(name_text.get(), contact_text.get(), email_text.get(),ID_text.get()):
        list1.insert(rows, END)
    e1.delete(0,END)
    e2.delete(0,END)
    e3.delete(0,END)
    e4.delete(0,END)




window=Tk()

window.wm_title("Contact book")

window.iconbitmap(r'C:\Anirudh\Python\School\project\icon.ico')


l1=Label(window,text="Name")
l1.grid(row=0,column=0)

l2=Label(window,text="Contact")
l2.grid(row=0,column=2)

l3=Label(window,text="Email")
l3.grid(row=1,column=0)

l4=Label(window,text="ID")
l4.grid(row=1,column=2)

name_text=StringVar()
e1=Entry(window,textvariable=name_text)
e1.grid(row=0,column=1)

contact_text=StringVar()
e2=Entry(window,textvariable=contact_text)
e2.grid(row=0,column=3)

email_text=StringVar()
e3=Entry(window,textvariable=email_text)
e3.grid(row=1,column=1)

ID_text=StringVar()
e4=Entry(window,textvariable=ID_text)
e4.grid(row=1,column=3)

list1=Listbox(window, height=10,width=35)
list1.grid(row=2,column=0,rowspan=6,columnspan=2)

sb1=Scrollbar(window)
sb1.grid(row=2,column=2,rowspan=6)

list1.configure(yscrollcommand=sb1.set)
sb1.configure(command=list1.yview)

sb2=Scrollbar(window, orient='horizontal', bg="red")
sb2.grid(row=8,column=1, rowspan=6)

list1.configure(xscrollcommand=sb2.set)
sb2.configure(command=list1.xview)


b1=Button(window,text="View all", width=12,command=view_command)
b1.grid(row=2,column=3)

b2=Button(window,text="Search entry", width=12)
b2.grid(row=3,column=3)

b3=Button(window,text="Add entry", width=12, command=add_command)
b3.grid(row=4,column=3)

b4=Button(window,text="Update selected", width=12)
b4.grid(row=5,column=3)

b5=Button(window,text="Delete selected", width=12)
b5.grid(row=6,column=3)

b6=Button(window,text="Whatsapp", width=12, bg="green")
b6.grid(row=7,column=3)

b7=Button(window,text="Close", width=12,command=window.destroy)
b7.grid(row=8,column=3)


window.mainloop()
我还没有完成它。。。当我尝试向数据库添加一些联系人时,我得到以下错误

PS C:\Anirudh\Python\School\project> python frontend.py
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\aayan\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "frontend.py", line 11, in add_command
    backend.insert(name_text.get(), contact_text.get(), email_text.get(),ID_text.get())
  File "C:\Anirudh\Python\School\project\backend.py", line 28, in insert
    cur.execute("INSERT INTO contact VALUES(?,?,?,?)", (name,number,email,id))
sqlite3.IntegrityError: datatype mismatch
谢谢。

在声明中

  cur.execute("INSERT INTO contact VALUES(?,?,?,?)", (name,number,email,id))
number
id
是字符串,但应该是整数。您可以在
insert
方法中使用

cur.execute("INSERT INTO contact VALUES(?,?,?,?)", (name,int(number),email,int(id)))
在声明中

  cur.execute("INSERT INTO contact VALUES(?,?,?,?)", (name,number,email,id))
number
id
是字符串,但应该是整数。您可以在
insert
方法中使用

cur.execute("INSERT INTO contact VALUES(?,?,?,?)", (name,int(number),email,int(id)))

谢谢成功了。我还发现,删除insert函数参数中的=“将解决函数参数的默认值的问题。只有在函数调用中不传递相应的参数时,才会使用它们。例如,如果您没有传递id值,那么它将成为函数中的空字符串。谢谢。。。成功了。我还发现,删除insert函数参数中的=“将解决函数参数的默认值的问题。只有在函数调用中不传递相应的参数时,才会使用它们。例如,如果不向id传递值,则它在函数中变为空字符串。