Python刷题系统实训二:数据库相关1
本系统数据库使用 SQLite。Python 使用 SQLite 的核心优势在于内置零依赖、单文件便携、零配置即开即用,是轻量级本地存储与快速开发的首选方案。
一、数据库设计
数据库名为 exam.db,内含三张数据表:
表名 | 字段 |
用户表 user | id, username, password |
题库表 exam_tm | id, tm, ana, anb, anc, andd, tan, tlx |
成绩表 chengji | id, userid, chengji, leibie |
二、利用 Navicat 建库建表并导入数据
用 Navicat 新建 SQLite 数据库 exam.db,按上表结构创建三张表。
导入用户表数据(user.xlsx)和题库数据(tm.xlsx)。
三、数据库初始化与会话管理
系统较小时所有代码可以放在 main.py 中,但建议将数据库相关代码单独拆分到 dataDB.py,然后在 main.py 中导入使用。
需要导入的包:
from sqlalchemy import create_engine, String, func, Integer
from sqlalchemy.orm import sessionmaker, mapped_column, Mapped, DeclarativeBase, Session
新建变量定义 SQLite 连接 URL:
DB_URL = "sqlite:///./exam.db"
创建数据库引擎(Engine):
engine = create_engine(DB_URL, connect_args={"check_same_thread": False})
建立会话工厂(SessionMaker):
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
定义依赖注入函数:
def get_db():
db= SessionLocal()
try:
yielddb
finally:
db.close()
会话(Session)是 SQLAlchemy 操作数据库的「操作句柄」。FastAPI 中通过 sessionmaker 创建会话工厂,每次接口请求生成一个独立会话。get_db 是一个生成器函数,FastAPI 的依赖注入系统会自动调用它——给每个请求分配一个独立的数据库 Session,请求结束后自动关闭。这是 FastAPI 最常用的数据库 Session 管理方式。