Python 语言 用 SQLAlchemy 实现学生信息管理系统 增删改查 + 外键关联

Python阿木 发布于 10 小时前 1 次阅读


SQLAlchemy 实现学生信息管理系统

随着信息技术的飞速发展,数据库技术已经成为现代企业信息管理的重要组成部分。Python 作为一种功能强大的编程语言,在数据处理和Web开发等领域有着广泛的应用。本文将使用 SQLAlchemy,一个流行的Python数据库工具,来实现一个简单的学生信息管理系统。该系统将支持增删改查(CRUD)操作,并使用外键关联来管理学生与课程之间的关系。

系统需求分析

在开始编写代码之前,我们需要明确系统的需求:

1. 数据模型:定义学生和课程的数据模型,包括学生信息和课程信息。
2. CRUD操作:实现对学生和课程信息的增删改查功能。
3. 外键关联:建立学生和课程之间的关联关系。
4. 用户界面:提供一个简单的命令行界面供用户操作。

环境准备

在开始之前,请确保您已经安装了以下软件:

- Python 3.x
- SQLAlchemy
- SQLite(Python内置)

您可以通过以下命令安装 SQLAlchemy:

bash
pip install sqlalchemy

数据模型设计

我们需要定义学生和课程的数据模型。在 SQLAlchemy 中,这通常通过继承 `Base` 类并定义 `__tablename__` 和字段来实现。

python
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship

Base = declarative_base()

class Student(Base):
__tablename__ = 'students'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
courses = relationship("Course", back_populates="student")

class Course(Base):
__tablename__ = 'courses'
id = Column(Integer, primary_key=True)
name = Column(String)
student_id = Column(Integer, ForeignKey('students.id'))
student = relationship("Student", back_populates="courses")

创建数据库和表

使用 SQLAlchemy 的 `create_engine` 函数创建一个数据库引擎,并使用它来创建表。

python
engine = create_engine('sqlite:///students.db')
Base.metadata.create_all(engine)

实现CRUD操作

接下来,我们将实现对学生和课程信息的增删改查操作。

python
Session = sessionmaker(bind=engine)

def add_student(name, age):
session = Session()
new_student = Student(name=name, age=age)
session.add(new_student)
session.commit()
session.close()

def add_course(name, student_id):
session = Session()
new_course = Course(name=name, student_id=student_id)
session.add(new_course)
session.commit()
session.close()

def delete_student(student_id):
session = Session()
student = session.query(Student).filter(Student.id == student_id).first()
if student:
session.delete(student)
session.commit()
session.close()

def delete_course(course_id):
session = Session()
course = session.query(Course).filter(Course.id == course_id).first()
if course:
session.delete(course)
session.commit()
session.close()

def update_student(student_id, name, age):
session = Session()
student = session.query(Student).filter(Student.id == student_id).first()
if student:
student.name = name
student.age = age
session.commit()
session.close()

def update_course(course_id, name, student_id):
session = Session()
course = session.query(Course).filter(Course.id == course_id).first()
if course:
course.name = name
course.student_id = student_id
session.commit()
session.close()

def get_students():
session = Session()
students = session.query(Student).all()
session.close()
return students

def get_courses():
session = Session()
courses = session.query(Course).all()
session.close()
return courses

用户界面

我们需要一个简单的用户界面来与用户交互。以下是一个简单的命令行界面示例:

python
def main_menu():
while True:
print("Student Information Management System")
print("1. Add Student")
print("2. Add Course")
print("3. Delete Student")
print("4. Delete Course")
print("5. Update Student")
print("6. Update Course")
print("7. Get All Students")
print("8. Get All Courses")
print("9. Exit")
choice = input("Enter your choice: ")

if choice == '1':
name = input("Enter student name: ")
age = int(input("Enter student age: "))
add_student(name, age)
elif choice == '2':
name = input("Enter course name: ")
student_id = int(input("Enter student ID: "))
add_course(name, student_id)
elif choice == '3':
student_id = int(input("Enter student ID to delete: "))
delete_student(student_id)
elif choice == '4':
course_id = int(input("Enter course ID to delete: "))
delete_course(course_id)
elif choice == '5':
student_id = int(input("Enter student ID to update: "))
name = input("Enter new student name: ")
age = int(input("Enter new student age: "))
update_student(student_id, name, age)
elif choice == '6':
course_id = int(input("Enter course ID to update: "))
name = input("Enter new course name: ")
student_id = int(input("Enter new student ID: "))
update_course(course_id, name, student_id)
elif choice == '7':
students = get_students()
for student in students:
print(f"ID: {student.id}, Name: {student.name}, Age: {student.age}")
elif choice == '8':
courses = get_courses()
for course in courses:
print(f"ID: {course.id}, Name: {course.name}, Student ID: {course.student_id}")
elif choice == '9':
break
else:
print("Invalid choice. Please try again.")

if __name__ == "__main__":
main_menu()

总结

本文使用 SQLAlchemy 实现了一个简单的学生信息管理系统,包括数据模型设计、CRUD操作和用户界面。通过这个示例,我们可以看到如何使用 SQLAlchemy 来处理数据库操作,以及如何将它们集成到一个完整的系统中。这个系统可以作为进一步开发更复杂应用程序的基础。