Простенькая база данных на Python
from tkinter import *
from tkinter import messagebox
import sqlite3
#
def on_closing():
if messagebox.askokcancel("Вихід","Ви дійсно бажаєте вийти?"):
curs.close()
conn.close()
root.destroy()
#
def add():
name=name_entry.get()
age=age_entry.get()
stat=stat_entry.get()
nationality=nationality_entry.get()
flag=True
if len(name)>20 or len(stat)>10 or len(nationality)>10:
flag=False
try:
age=int(age)
stat=bool(stat)
except:
flag=False
else:
if age<=0:
flag=False
if flag:
curs.execute("SELECT * FROM persons WHERE name = '{0}'".format(name))
conn.commit()
rows = curs.fetchall()
if not(rows):
ins='INSERT INTO persons (name, age, stat, nationality) VALUES(?, ?, ?, ?)'
curs.execute(ins, (name, age, stat, nationality))
name_entry.delete(0, END)
age_entry.delete(0, END)
stat_entry.delete(0, END)
nationality_entry.delete(0, END)
view()
messagebox.showinfo("Додавання запису", "Запис додано успішно")
else:
messagebox.showerror("Помилка!", "Запис вже існує")
else:
messagebox.showerror("Помилка!", "При введені даних допущені помилки")
#
def dell():
name=name_entry.get()
curs.execute("SELECT * FROM persons WHERE NAME = '{0}'".format(name))
conn.commit()
rows = curs.fetchall()
if rows:
if messagebox.askokcancel("Видалення", "Ви дыйсно бажаэье видалити цю персону"+name+"?"):
curs.execute("DELETE FROM persons WHERE name = '{0}'".format(name))
conn.commit()
view()
messagebox.showinfo("Видалення запису", "Запис видалено")
else:
messagebox.showerror("Помилка!", "Запис відсутній")
#Обробник натискання кнопки "Список"
def view():
curs.execute('SELECT * FROM persons ORDER BY name')
conn.commit()
rows = curs.fechall()
text.configure(state="normal")
text.delete(1.0, END)
text.insert(END, 'Список персон:\n')
text.insert(END,'\n')
text.insert(END, "ПІБ"+" "*17+'Стать'+' '*5+'|Вік |Національність\n')
text.insert(END,'-'*45+'\n')
for elem in rows:
text.insert(END,'{0:<20}|{1:<10}|{2:^5}|{3:^7}\n'.format(elem\[0\], elem\[1\], elem\[2\], elem\[3\]))
text.tag_add('title',1.0,END)
text.tag_config('title',font=("Courier New", 14, 'normal'))
text.configure(state='disabled')
#обробник натискання кнопки "Пошук"
def find():
name = name_entry.get()
age = age_entry.get()
stat = stat_entry.get()
nationality = nationality_entry.get()
if name:
s = "name = '{0}'".format(name)
elif age:
s = "age = {0}".format(age)
elif stat:
s = "stat = {0}".format(stat)
elif nationality:
s = "nationality = {0}".format(nationality)
else:
s="name = ' '"
curs.execute('SELECT * FROM persons WHERE ' + s + 'ORDER BY name')
conn.commit()
rows = curs.fetchall()
text.configure(state="normal")
text.delete(1.0, END)
text.insert(END, 'Список персон:\n')
text.insert(END,'\n')
text.insert(END, "ПІБ"+" "*17+'Стать'+' '*5+'|Вік |Національність\n')
text.insert(END,'-'*45+'\n')
for elem in rows:
text.insert(END,'{0:<20}|{1:<10}|{2:^5}|{3:^7}\n'.format(elem\[0\], elem\[1\], elem\[2\], elem\[3\]))
text.tag_add('title',1.0,END)
text.tag_config('title',font=("Courier New", 14, 'normal'))
text.configure(state='disabled')
#створення таблиці у базі даних
conn = sqlite3.connect('persons.db')
curs = conn.cursor()
curs.execute('''CREATE TABLE IF NOT EXISTS persons
name VARCHAR(20) PRIMARY KEY
age INT
stat VARCHAR(10),
nationality BOOL)''')
conn.commit()
#створення віконного застосунку
root = Tk()
root.title("Робота з базами даних")
root.protocol ("WM_DELETE_WINDOW", on_closing)
#створення статичних надписів та полів вводу
name_label = Label (text="Пpisaиme:")
age_label = Label (text="Bix: ")
stat_label= Label (text="Tpyna: ")
nationality_label = Label (text="PeйTиг:")
name_entry = Entry(width = 30)
age_entry = Entry(width = 30)
stat_entry = Entry(width = 30)
nationality_entry = Entry(width = 30)
#розміщення статичних надписів та полів вводу у вікні
name_label.grid(row=0, column=0, padx=10, sticky="w")
name_entry.grid(row=0, column=1, padx=5, pady=5)
age_label.grid(row=0, column=2, sticky="w")
age_entry.grid(row=0, column=3, padx=5, pady=5)
stat_label.grid(row=1, column=0, padx=10, sticky="w")
stat_entry.grid(row=1, column=1, padx=5, pady=5)
nationality_label.grid(row=1, column=2, sticky="w")
nationality_entry.grid(row=1, column=3, padx=5, pady=5)
#область виведення записів
text = Text (width=75, height=15)
text.grid(row=2, column=0, columnspan=4, padx=10, pady=5, sticky="w")
text.configure (state='disabled')
#створення кнопок
add_button = Button (text=" Додaти ", command=add)
dell_button =Button (text=" Видалити ", command=dell)
view_button= Button (text="Cписок", command=view)
find_button= Button (text=" Пошук ", command=find)
#розміщення кнопок у вікні
add_button.grid(row=3, column=0, padx=20, pady=5)
dell_button.grid(row=3, column=1, padx=20, pady=5)
view_button.grid(row=3, column=2, padx=20, pady=5)
find_button.grid(row=3, column=3, padx=20, pady=5)
#запук циклу обробки подій вікна для взаємодії з коритсувачем
root.mainloop()
Не могу понять где ошибся, помогите:/
