A Flask-based school management system with student, teacher, class, and grade administration featuring full CRUD operations and MySQL database.
Live Demo: school-management-system-atyl.onrender.com
- Features
- Screenshots
- Tech Stack
- Database Schema
- Installation
- Usage
- CRUD Operations
- Project Structure
- Deployment
- License
- Contact
- ✅ Student Management - Add, edit, view, and delete student records
- ✅ Teacher Management - Manage teachers and subject assignments
- ✅ Subject & Class Management - Organize academic subjects and class schedules
- ✅ Enrollment System - Link students to classes with enrollment tracking
- ✅ Grade Management - Record and track student performance
- ✅ Relationship Queries - Complex SQL joins across multiple tables
- ✅ Responsive Web Interface - Mobile-friendly design
- ✅ Full CRUD Operations - Create, Read, Update, Delete for all entities
- ✅ Cloud Deployed - Live on Render with MySQL database
| Technology | Purpose |
|---|---|
| Python 3.8+ | Core programming language |
| Flask | Lightweight web framework |
| MySQL | Relational database |
| mysql-connector-python | Database driver |
| python-dotenv | Environment variable management |
| Technology | Purpose |
|---|---|
| HTML5 | Page structure |
| CSS3 | Styling and responsive design |
| Jinja2 | Flask template engine |
| JavaScript | Dynamic interactions |
- Render - Cloud hosting platform
- MySQL Database - Cloud-hosted relational database
- Students - Student information (StudentID, FirstName, LastName, DateOfBirth, Email)
- Teachers - Teacher details (TeacherID, FirstName, LastName, SubjectID, Email)
- Subjects - Academic subjects (SubjectID, SubjectName, Description)
- Classes - Class schedules (ClassID, ClassName, TeacherID, Schedule)
- Enrollments - Student-Class mapping (EnrollmentID, StudentID, ClassID, EnrollmentDate)
- Grades - Student performance (GradeID, StudentID, SubjectID, Grade, Date)
- Students ↔ Classes - Many-to-many via Enrollments table
- Teachers ↔ Subjects - One-to-many relationship
- Students ↔ Grades - One-to-many relationship
- Python 3.8 or higher
- MySQL 8.0 or higher
- Git
1. Clone Repository
git clone https://github.com/ShashankGowni/School_Management_System.git
cd School_Management_System2. Create Virtual Environment
# Windows
python -m venv venv
venv\Scripts\activate
# Mac/Linux
python3 -m venv venv
source venv/bin/activate3. Install Dependencies
pip install -r requirements.txt4. Setup Database Create database:
CREATE DATABASE school_management;
USE school_management;Run schema script:
mysql -u root -p school_management < create_school_management_tables.sqlLoad sample data (optional):
mysql -u root -p school_management < School_Management_System.sql5. Configure Environment
Create .env file in project root:
```env``
DB_HOST=localhost
DB_USER=your_mysql_username
DB_PASSWORD=your_mysql_password
DB_NAME=school_management
SECRET_KEY=your_secret_key_here
Generate secret key in Python:
import secrets
print(secrets.token_hex(16))6. Run Application
python app.py🌐 Access: http://localhost:5000
Managing Students
Add Student:
- Click "Add Student" button
- Fill in: First Name, Last Name, Date of Birth, Email
- Click "Submit"
Edit Student:
Click on student name in table Modify desired fields Click "Save Changes"
Delete Student:
- Click "Delete" button
- Confirm deletion
- Enrolling Students in Classes
- Navigate to Enrollments page
- Select student from dropdown
- Select class from dropdown
- Choose enrollment date
- Click "Submit"
- Recording Grades
- Go to Grades page
- Select student
- Select subject
- Enter grade (A, B, C, D, F)
- Add date
- Click "Submit"
Example SQL Queries View students with their classes:
SELECT Students.FirstName, Students.LastName, Classes.ClassName
FROM Students
JOIN Enrollments ON Students.StudentID = Enrollments.StudentID
JOIN Classes ON Enrollments.ClassID = Classes.ClassID;View teachers with subjects:
SELECT Teachers.FirstName, Teachers.LastName, Subjects.SubjectName
FROM Teachers
JOIN Subjects ON Teachers.SubjectID = Subjects.SubjectID;Add new student:
INSERT INTO Students (FirstName, LastName, DateOfBirth, Email)
VALUES ('John', 'Doe', '2005-03-15', 'john.doe@school.com');Update student email:
UPDATE Students
SET Email = 'newemail@school.com'
WHERE StudentID = 1;Delete enrollment:
DELETE FROM Enrollments WHERE EnrollmentID = 5;📁 Project Structure
School_Management_System/
├── app.py # Main Flask application
├── school_management_system.py # Core business logic
├── create_school_management_tables.sql # Database schema
├── School_Management_System.sql # Sample data
├── requirements.txt # Python dependencies
├── .env # Environment variables (not tracked)
├── .gitignore # Git ignore rules
├── LICENSE # Proprietary license
├── templates/ # HTML templates
│ ├── base.html
│ ├── students.html
│ ├── teachers.html
│ └── ...
├── static/ # CSS, JS, images
│ ├── css/
│ │ └── styles.css
│ └── js/
│ └── scripts.js
└── venv/ # Virtual environment (not tracked)
This project is deployed on Render at: school-management-system-atyl.onrender.com
- Deploy Your Own
- Fork this repository
- Create account on Render
- Create new MySQL database on Render
- Create new Web Service
- Connect GitHub repository
Set environment variables:
- DB_HOST
- DB_USER
- DB_PASSWORD
- DB_NAME
- SECRET_KEY
- Deploy!
Database Connection Error
Verify MySQL is running:
mysql --versionCheck credentials in .env:
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=school_managementReinstall dependencies:
pip install -r requirements.txtPort Already in Use
Change port in app.py:
if __name__ == '__main__':
app.run(debug=True, port=5001)Tables Don't Exist Re-run schema script:
mysql -u root -p school_management < create_school_management_tables.sql© 2025 Gowni Shashank. All Rights Reserved.
This software is proprietary and confidential. See the LICENSE file for complete terms.
License Summary
- ✅ Viewable for portfolio/demonstration purposes only
- ❌ No permission to use, copy, modify, or distribute
- ❌ Commercial use strictly prohibited without written permission
- 💼 For licensing inquiries: shashankgowni09@gmail.com This project is shared publicly to showcase my development capabilities.
- Flask - Lightweight Python web framework
- MySQL - Reliable relational database
- Render - Cloud hosting platform
- Python - Programming language
- Jinja2 - Template engine
Gowni Shashank
- 📧 Email: shashankgowni09@gmail.com
- 💼 LinkedIn: linkedin.com/in/shashankgowni
- 🐙 GitHub: @ShashankGowni
Open to collaboration on interesting projects.
Created with 💻 by Gowni Shashank • January 2025 🌍











