面试题答案
一键面试from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base
import traceback
# 数据库连接配置
engine = create_engine('mysql+pymysql://username:password@host:port/database_name')
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()
# 定义班级表
class Classes(Base):
__tablename__ = 'classes'
id = Column(Integer, primary_key=True)
class_name = Column(String(50))
students = relationship('Students', backref='classes')
# 定义学生表
class Students(Base):
__tablename__ ='students'
id = Column(Integer, primary_key=True)
name = Column(String(50))
class_id = Column(Integer, ForeignKey('classes.id'))
try:
# 查询'一班'所有学生的信息
target_class = session.query(Classes).filter(Classes.class_name == '一班').first()
if target_class:
students = target_class.students
for student in students:
print(f"学生ID: {student.id}, 学生姓名: {student.name}")
# 这里开始模拟对学生信息的修改操作,放入事务中
try:
session.begin()
student.name = "新名字" # 模拟修改学生姓名
session.commit()
except Exception as e:
session.rollback()
print(f"修改学生 {student.name} 信息时出错: {e}")
traceback.print_exc()
except Exception as e:
print(f"数据库操作出现异常: {e}")
traceback.print_exc()
finally:
session.close()
请将代码中的username
、password
、host
、port
、database_name
替换为实际的MySQL数据库连接信息。此代码实现了查询指定班级的学生信息,并将对学生信息的修改操作放入事务中,同时处理了可能出现的数据库异常。