FastAPI(六十四)实战开发《在线课程学习系统》设计数据库以及连接配置

前言

   针对之前的FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口,我们对接口进行设计。

正文

    我们需要对需要的数据库进行设计。

复制代码
from sqlalchemy import Column, Integer, String, ForeignKey, Boolean, Text, DateTime
from datetime import datetime


class User(Base):
    '''用户基础表'''
    __tablename__ = "users"
    id = Column(Integer, primary_key=True, index=True)
    username = Column(String(length=32), unique=True, index=True)  # 用户名
    password = Column(String(length=252))  # 密码
    status = Column(Integer, default=0)  # 1.删除,0正常
    jobnum = Column(Integer, nullable=True)  # 工号
    studentnum = Column(Integer, nullable=True)  # 学号
    age = Column(Integer)  # 年龄
    sex = Column(String(length=8), default="")  # 性别
    role = Column(Integer, ForeignKey('roles.id'))  # 角色
    addtime=Column(DateTime,default=datetime.now())


class Role(Base):
    '''角色表'''
    __tablename__ = "roles"
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String(length=8), unique=True, index=True)  # 角色名称


class Course(Base):
    '''课程表'''
    __tablename__ = "courses"
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String(length=252), unique=True, index=True)  # 课程名称
    icon = Column(String(length=252), nullable=True)  # icon
    desc = Column(String(length=252), nullable=True)  # 描述
    status = Column(Boolean, default=False)  # 状态
    onsale = Column(Boolean, default=False)  # 是否上架
    catalog = Column(Text, nullable=True)  # 目录
    owner = Column(Integer, ForeignKey('users.id'))  # 拥有者
    likenum = Column(Integer, default=0)  # 点赞数


class Studentcourse(Base):
    '''学生课程表'''
    __tablename__ = "studentcourses"
    id = Column(Integer, primary_key=True, index=True)
    students = Column(Integer, ForeignKey('users.id'))  # 学生
    course = Column(Integer, ForeignKey('courses.id'))  # 课程
    addtime = Column(DateTime, default=datetime.now())  # 加入时间
    updatetime = Column(DateTime, default=addtime)  # 更新时间
    status = Column(Integer, default=0)  # 1.删除,0正常

class Commentcourse(Base):
    '''课程评论'''
    __tablename__ = "commentcourses"
    id = Column(Integer, primary_key=True, index=True)
    course = Column(Integer, ForeignKey('courses.id'))  # 课程id
    users = Column(Integer, ForeignKey('users.id'))  # 评论人
    pid = Column(Integer,ForeignKey('self'))  # 回复。
    addtime = Column(DateTime, default=datetime.now())  # 添加时间
    top = Column(Boolean, default=False)  # 是否置顶
    context = Column(Text)
    status = Column(Integer, default=0)  # 1.删除,0正常

class Message(Base):
    '''消息表'''
    __tablename__ = "messages"
    id = Column(Integer, primary_key=True, index=True)
    senduser = Column(Integer, ForeignKey('users.id'))  # 发送者
    acceptusers = Column(Integer, ForeignKey('users.id'))  # 接受者
    read = Column(Boolean, default=False)  # 是否已读,接受者是否已读
    sendtime = Column(String(length=252))  # 发送时间
    pid = Column(Integer,ForeignKey('self'))
    addtime = Column(DateTime, default=datetime.now())  # 添加时间
    context=Column(Text)
    status = Column(Integer, default=0)  # 1.删除,0正常
复制代码

设计完毕数据库后,我们需要对数据库连接进行配置,我们使用的数据库是mysql,我们需要安装pymysql的依赖。然后我们需要配置

1
2
3
4
5
6
7
8
9
10
11
12
#test环境
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
 
SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:@127.0.0.1:3306/testdb"
 
engine = create_engine(
    SQLALCHEMY_DATABASE_URL, encoding='utf8', echo=True
)
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

  

1
2
3
4
5
6
7
8
9
10
11
12
#dev环境
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
 
SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:@127.0.0.1:3306/devdb"
 
engine = create_engine(
    SQLALCHEMY_DATABASE_URL, encoding='utf8', echo=True
)
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

我们设计了两个数据库的,用于不同环境的使用,那么我们如何根据不同环境选择呢,其实很简单。

#在数据库表设计的地方
from config import EVENT

if EVENT == "test":
    from models.testDatabase import Base, engine
else:
    from models.database import Base, engine

 我们在启动的时候要想自动配置创建数据库,我们使用下面的方式

#最后根据环境创建数据库
Base.metadata.create_all(bind=engine)

数据库相关的深入的讲解可以看之前分享的,

FastAPI 学习之路(三十二)创建数据库

FastAPI 学习之路(三十三)操作数据库

FastAPI 学习之路(三十四)数据库多表操作

 

文章首发在公众号,欢迎关注。

 

 

posted @   北漂的雷子  阅读(2077)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2018-11-22 spring boot 笔记
点击右上角即可分享
微信分享提示