Mein letztes Beispiel ohne ORM (ungetestet):
Code: Alles auswählen
import tkinter as tk
from tkinter import messagebox
from sqlalchemy import (
INT,
VARCHAR,
Column,
MetaData,
Table,
delete,
insert,
select,
)
META_DATA = MetaData()
STUDENT_TABLE = Table(
"dbo.student",
META_DATA,
Column("id", INT, primary_key=True),
Column("firstname", VARCHAR, nullable=False),
Column("lastname", VARCHAR, nullable=False),
Column("address", VARCHAR, nullable=False),
)
def create_student_table(engine):
STUDENT_TABLE.create(engine, checkfirst=True)
print("Table 'Student' created succesfully.")
def add_student(db_connection, student_tree, textboxes):
firstname, lastname, address = [
textbox.get().strip() for textbox in textboxes
]
if not all(firstname, lastname, address):
messagebox.showinfo("Error", "Please fill out all the fields!")
else:
try:
result = db_connection.execute(
insert(STUDENT_TABLE).values(
firstname=firstname, lastname=lastname, address=address
)
)
db_connection.commit()
except Exception as error:
messagebox.showinfo("Error", f"Failed to add data: {error}")
else:
messagebox.showinfo("Data added succesfully!")
student_tree.insert(
"",
tk.END,
values=(
result.inserted_primary_key.id,
firstname,
lastname,
address,
),
)
def del_student(db_connection, student_tree):
selection = student_tree.focus()
if selection:
delete(STUDENT_TABLE).where(
STUDENT_TABLE.c.id
== int(student_tree.item(selection)["values"][0])
)
db_connection.commit()
student_tree.delete(selection)
def load_students(db_connection, student_tree):
for student in db_connection.execute(select(STUDENT_TABLE)):
student_tree.insert(
"",
tk.END,
values=(
student.id,
student.firstname,
student.lastname,
student.address,
),
)