База данных на 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
    if stat("Чоловік") or stat("Жінка"):
        flag=True
    try:
        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.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')
#обробник натискання кнопки "Пошук"
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="ПІБ:")
age_label = Label (text="Biк: ")
stat_label= Label (text="Стать: ")
nationality_label = Label (text="Національність:")
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()
    
    
        
        

Как сделать так что-бы "Чоловік" сохранялся как True, а False "Жінка", и что-бы оно заносилось нормально в БД, пытался понять как это сделать, не выходит, прошу помогите:(


Ответы (0 шт):