Best way to add data of multiple tables into mysql database from python
I am creating a windows GUI application using python and mysql. It is a student management system. I have written code to add student
data into students
table. What I would like to know is how to add data of parent
and classroom
tables from the code.
Database tables
students Table ID, roll_no, name, gender, dob parents Table ID, student_id, first_name, last_name, address, email, contact_no classrooms Table ID, student_id, name
python code
from tkinter import * from tkinter import ttk import pymysql class Student: def __init__(self, root): self.root = root self.root.title('Student Management System') self.root.geometry('1350x750+0+0') title = Label(self.root, text='Student Management System', bd=10, relief=GROOVE, font=('times new roman', 40, 'bold'), bg='yellow', fg='red') title.pack(side=TOP, fill=X) #Variables self.roll_no_var = StringVar() self.name_var = StringVar() self.gender_var = StringVar() self.dob_var = StringVar() #Frame to add data Data_Frame = Frame(self.root, bd=4, relief=RIDGE, bg='crimson') Data_Frame.place(x=20, y=100, width=450, height=580) m_title = Label(Data_Frame, text='Manage Students', font=('times new roman', 30, 'bold'), bg='crimson', fg='white') m_title.grid(row=0, columnspan=2, pady=20) label_roll = Label(Data_Frame, text='Roll Number', font=('times new roman', 20, 'bold'), bg='crimson', fg='white') label_roll.grid(row=1, column=0, pady=10, padx=20, sticky='w') text_roll = Entry(Data_Frame, textvariable=self.roll_no_var, font=('times new roman', 15, 'bold'), bd=5, relief=GROOVE) text_roll.grid(row=1, column=1, pady=10, padx=20, sticky='w') label_name = Label(Data_Frame, text='Name', font=('times new roman', 20, 'bold'), bg='crimson', fg='white') label_name.grid(row=2, column=0, pady=10, padx=20, sticky='w') text_name = Entry(Data_Frame, textvariable=self.name_var, font=('times new roman', 15, 'bold'), bd=5, relief=GROOVE) text_name.grid(row=2, column=1, pady=10, padx=20, sticky='w') label_gender = Label(Data_Frame, text='Gender', font=('times new roman', 20, 'bold'), bg='crimson', fg='white') label_gender.grid(row=4, column=0, pady=10, padx=20, sticky='w') dropdown_gender = ttk.Combobox(Data_Frame, textvariable=self.gender_var, font=('times new roman', 13, 'bold'), state='readonly') dropdown_gender['values'] = ('male', 'female', 'other') dropdown_gender.grid(row=4, column=1, pady=10, padx=20) label_dob = Label(Data_Frame, text='dob', font=('times new roman', 20, 'bold'), bg='crimson', fg='white') label_dob.grid(row=6, column=0, pady=10, padx=20, sticky='w') text_dob = Entry(Data_Frame, textvariable=self.dob_var, font=('times new roman', 15, 'bold'), bd=5, relief=GROOVE) text_dob.grid(row=6, column=1, pady=10, padx=20, sticky='w') #button frame button_Frame = Frame(Data_Frame, bd=4, relief=RIDGE, bg='crimson') button_Frame.place(x=15, y=515, width=420) add_btn = Button(button_Frame, text='Add', width=10, command=self.add_student).grid(row=0, column=0, padx=10, pady=10) update_btn = Button(button_Frame, text='Update', width=10).grid(row=0, column=1, padx=10, pady=10) delete_btn = Button(button_Frame, text='Delete', width=10).grid(row=0, column=2, padx=10, pady=10) clear_btn = Button(button_Frame, command=self.clear_data, text='Clear', width=10).grid(row=0, column=3, padx=10, pady=10) #Display Frame Display_Frame = Frame(self.root, bd=4, relief=RIDGE, bg='crimson') Display_Frame.place(x=500, y=100, width=800, height=580) label_search = Label(Display_Frame, text='Search By', font=('times new roman', 20, 'bold'), bg='crimson', fg='white') label_search.grid(row=0, column=0, pady=10, padx=20, sticky='w') dropdown_search = ttk.Combobox(Display_Frame, width=10, font=('times new roman', 13, 'bold'), state='readonly') dropdown_search['values'] = ('Roll', 'Name', 'Contact') dropdown_search.grid(row=0, column=1, pady=10, padx=20) text_search = Entry(Display_Frame, font=('times new roman', 10, 'bold'), bd=5, relief=GROOVE) text_search.grid(row=0, column=2, pady=10, padx=20, sticky='w') search_btn = Button(Display_Frame, text='Search', width=10).grid(row=0, column=3, padx=10, pady=10) show_btn = Button(Display_Frame, text='Show All', width=10).grid(row=0, column=4, padx=10, pady=10) #Table Frame Table_Frame = Frame(Display_Frame, bd=4, relief=RIDGE, bg='crimson') Table_Frame.place(x=10, y=70, width=750, height=500) scroll_x = Scrollbar(Table_Frame, orient=HORIZONTAL) scroll_y = Scrollbar(Table_Frame, orient=VERTICAL) self.Student_Table = ttk.Treeview(Table_Frame, columns=('roll', 'name', 'gender', 'dob'), xscrollcommand=scroll_x.set, yscrollcommand=scroll_y.set) scroll_x.pack(side=BOTTOM, fill=X) scroll_y.pack(side=RIGHT, fill=Y) scroll_x.config(command=self.Student_Table.xview) scroll_y.config(command=self.Student_Table.yview) self.Student_Table.heading('roll', text='Roll No') self.Student_Table.heading('name', text='Name') self.Student_Table.heading('gender', text='Gender') self.Student_Table.heading('dob', text='D O B') self.Student_Table['show'] = 'headings' self.Student_Table.column('roll', width=100) self.Student_Table.column('name', width=100) self.Student_Table.column('gender', width=100) self.Student_Table.column('dob', width=100) self.Student_Table.pack(fill=BOTH, expand=1) self.fetch_student_data() def add_student(self): con = pymysql.connect(host='localhost', user='root', password='mastmacha123', database='student_management') cur = con.cursor() cur.execute('INSERT INTO students(roll_no, name, gender, dob) VALUES(%s, %s, %s, %s, %s, %s, %s)', (self.roll_no_var.get(), self.name_var.get(), self.gender_var.get(), self.dob_var.get())) con.commit() self.fetch_student_data() self.clear_data() con.close() def fetch_student_data(self): con = pymysql.connect(host='localhost', user='root', password='', database='student_management') cur = con.cursor() cur.execute('SELECT * FROM students') rows = cur.fetchall() if len(rows) > 0: self.Student_Table.delete(*self.Student_Table.get_children()) for row in rows: self.Student_Table.insert('', END, values=row) con.commit() con.close() def clear_data(self): self.roll_no_var.set('') self.name_var.set('') self.gender_var.set('') self.dob_var.set('') root = Tk() ob = Student(root) root.mainloop()
Here I would like to send data of parent
and also classroom
. The classrooms of students will be changed. It is many to many
relationship. If I create new classes for parent
and classroom
how can I send the data of parent
and classroom
so that relationships of the models are maintained in the database?