├── db └── dbone.db ├── __pycache__ ├── myaction.cpython-310.pyc └── datatable.cpython-310.pyc ├── README.md ├── myaction.py ├── main.py └── datatable.py /db/dbone.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bobwatcherx/FletCRUDSchollapp/HEAD/db/dbone.db -------------------------------------------------------------------------------- /__pycache__/myaction.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bobwatcherx/FletCRUDSchollapp/HEAD/__pycache__/myaction.cpython-310.pyc -------------------------------------------------------------------------------- /__pycache__/datatable.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bobwatcherx/FletCRUDSchollapp/HEAD/__pycache__/datatable.cpython-310.pyc -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Flet School app WITH SQlite3 CRUD BAsic 2 | 3 | ## if You Get Error fisrt run Flet Because You Not Create Table 4 | ## run myaction.py before flet main.py 5 | ## run with command python3 myaction.py for create YOu Table SQlite 6 | -------------------------------------------------------------------------------- /myaction.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | conn = sqlite3.connect("db/dbone.db",check_same_thread=False) 3 | 4 | 5 | # THIS SCRIPT IS CREATE TABEL AUTOMATICALLY WHEN YOU RUN THE FLET APP 6 | 7 | def create_table(): 8 | c = conn.cursor() 9 | c.execute("""CREATE TABLE IF NOT EXISTS users( 10 | id INTEGER PRIMARY KEY AUTOINCREMENT, 11 | name TEXT, 12 | contact TEXT, 13 | age INTEGER, 14 | gender TEXT, 15 | email TEXT, 16 | address TEXT) 17 | """) 18 | conn.commit() 19 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from flet import * 2 | # IMPORT YOU CREATE TABLE 3 | from myaction import create_table 4 | from datatable import mytable,tb,calldb 5 | import sqlite3 6 | conn = sqlite3.connect("db/dbone.db",check_same_thread=False) 7 | 8 | def main(page:Page): 9 | 10 | # AND RUN SCRIPT FOR CREATE TABLE WHEN FLET FIRST RUN 11 | create_table() 12 | 13 | page.scroll = "auto" 14 | 15 | def showInput(e): 16 | inputcon.offset = transform.Offset(0,0) 17 | page.update() 18 | 19 | def hidecon(e): 20 | inputcon.offset = transform.Offset(2,0) 21 | page.update() 22 | 23 | def savedata(e): 24 | try: 25 | # INPUT TO DATABASE 26 | c = conn.cursor() 27 | c.execute("INSERT INTO users (name,age,contact,email,address,gender) VALUES(?,?,?,?,?,?)",(name.value,age.value,contact.value,email.value,address.value,gender.value)) 28 | conn.commit() 29 | print("success") 30 | 31 | # AND SLIDE RIGHT AGAIN IF FINAL INPUT SUUCESS 32 | inputcon.offset = transform.Offset(2,0) 33 | 34 | # ADD SNACKBAR IF SUCCESS INPUT TO DATABASE 35 | 36 | page.snack_bar = SnackBar( 37 | Text("success INPUT"), 38 | bgcolor="green" 39 | ) 40 | 41 | page.snack_bar.open = True 42 | 43 | # REFRESH TABLE 44 | tb.rows.clear() 45 | calldb() 46 | tb.update() 47 | page.update() 48 | 49 | 50 | except Exception as e: 51 | print(e) 52 | 53 | # CREATE FIELD FOR INPUT 54 | 55 | name = TextField(label="name") 56 | age = TextField(label="age") 57 | contact = TextField(label="contact") 58 | email = TextField(label="email") 59 | address = TextField(label="address") 60 | gender = RadioGroup(content=Column([ 61 | Radio(value="man",label="man"), 62 | Radio(value="woman",label="woman") 63 | 64 | ])) 65 | 66 | # CREATE MODAL INPUT FOR ADD NEW DATA 67 | inputcon = Card( 68 | # ADD SLIDE LEFT EFFECT 69 | offset = transform.Offset(2,0), 70 | animate_offset = animation.Animation(600,curve="easeIn"), 71 | elevation=30, 72 | content=Container( 73 | content=Column([ 74 | Row([ 75 | Text("Add new data",size=20,weight="bold"), 76 | IconButton(icon="close",icon_size=30, 77 | on_click=hidecon 78 | ), 79 | ]), 80 | name, 81 | age, 82 | contact, 83 | email, 84 | gender, 85 | address, 86 | FilledButton("save data", 87 | on_click=savedata 88 | ) 89 | 90 | ]) 91 | 92 | ) 93 | 94 | ) 95 | 96 | 97 | page.add( 98 | Column([ 99 | Text("SCHOLL APP",size=30,weight="bold"), 100 | ElevatedButton("add new data", 101 | on_click=showInput 102 | ), 103 | mytable, 104 | # AND DIALOG FOR ADD DATA 105 | inputcon 106 | 107 | 108 | # NOTICE IF YOU ERROR 109 | # DISABLE import Datatable like this 110 | ]) 111 | 112 | ) 113 | 114 | flet.app(target=main) 115 | -------------------------------------------------------------------------------- /datatable.py: -------------------------------------------------------------------------------- 1 | from flet import * 2 | import sqlite3 3 | conn = sqlite3.connect('db/dbone.db',check_same_thread=False) 4 | 5 | tb = DataTable( 6 | columns=[ 7 | DataColumn(Text("actions")), 8 | DataColumn(Text("name")), 9 | DataColumn(Text("age")), 10 | DataColumn(Text("contact")), 11 | DataColumn(Text("email")), 12 | DataColumn(Text("address")), 13 | DataColumn(Text("gender")), 14 | ], 15 | rows=[] 16 | 17 | ) 18 | 19 | 20 | def showdelete(e): 21 | try: 22 | myid = int(e.control.data) 23 | c = conn.cursor() 24 | c.execute("DELETE FROM users WHERE id=?", (myid,)) 25 | conn.commit() 26 | print("success delete") 27 | tb.rows.clear() 28 | calldb() 29 | tb.update() 30 | 31 | except Exception as e: 32 | print(e) 33 | 34 | 35 | id_edit = Text() 36 | name_edit = TextField(label="name") 37 | age_edit = TextField(label="age") 38 | contact_edit = TextField(label="contact") 39 | gender_edit = RadioGroup(content=Column([ 40 | Radio(value="man",label="man"), 41 | Radio(value="woman",label="woman"), 42 | 43 | ])) 44 | email_edit = TextField(label="email") 45 | address_edit = TextField(label="address") 46 | 47 | 48 | def hidedlg(e): 49 | dlg.visible = False 50 | dlg.update() 51 | 52 | 53 | def updateandsave(e): 54 | try: 55 | myid = id_edit.value 56 | c = conn.cursor() 57 | c.execute("UPDATE users SET name=?, contact=?, age=?, gender=?, email=?, address=? WHERE id=?", (name_edit.value, contact_edit.value, age_edit.value, gender_edit.value, email_edit.value, address_edit.value, myid)) 58 | conn.commit() 59 | print("success Edit ") 60 | tb.rows.clear() 61 | calldb() 62 | dlg.visible = False 63 | dlg.update() 64 | tb.update() 65 | except Exception as e: 66 | print(e) 67 | 68 | dlg = Container( 69 | bgcolor="blue200", 70 | padding=10, 71 | content=Column([ 72 | Row([ 73 | Text("Edit Form",size=30,weight="bold"), 74 | IconButton(icon="close",on_click=hidedlg), 75 | ],alignment="spaceBetween"), 76 | name_edit, 77 | age_edit, 78 | contact_edit, 79 | Text("Select Gender",size=20,weight="bold"), 80 | gender_edit, 81 | email_edit, 82 | address_edit, 83 | ElevatedButton("Update",on_click=updateandsave) 84 | 85 | ]) 86 | ) 87 | 88 | 89 | 90 | 91 | def showedit(e): 92 | data_edit = e.control.data 93 | id_edit.value = data_edit['id'] 94 | name_edit.value = data_edit['name'] 95 | age_edit.value = data_edit['age'] 96 | contact_edit.value = data_edit['contact'] 97 | gender_edit.value = data_edit['gender'] 98 | email_edit.value = data_edit['email'] 99 | address_edit.value = data_edit['address'] 100 | 101 | dlg.visible = True 102 | dlg.update() 103 | 104 | 105 | def calldb(): 106 | c = conn.cursor() 107 | c.execute("SELECT * FROM users") 108 | users = c.fetchall() 109 | print(users) 110 | if not users == "": 111 | keys = ['id', 'name', 'contact', 'age', 'gender', 'email', 'address'] 112 | result = [dict(zip(keys, values)) for values in users] 113 | for x in result: 114 | tb.rows.append( 115 | DataRow( 116 | cells=[ 117 | DataCell(Row([ 118 | IconButton(icon="create",icon_color="blue", 119 | data=x, 120 | on_click=showedit 121 | 122 | ), 123 | IconButton(icon="delete",icon_color="red", 124 | data=x['id'], 125 | on_click=showdelete 126 | 127 | ), 128 | ])), 129 | DataCell(Text(x['name'])), 130 | DataCell(Text(x['age'])), 131 | DataCell(Text(x['contact'])), 132 | DataCell(Text(x['email'])), 133 | DataCell(Text(x['address'])), 134 | DataCell(Text(x['gender'])), 135 | ], 136 | ), 137 | 138 | ) 139 | 140 | 141 | calldb() 142 | 143 | 144 | 145 | 146 | 147 | dlg.visible = False 148 | mytable = Column([ 149 | dlg, 150 | Row([tb],scroll="always") 151 | ]) --------------------------------------------------------------------------------