• 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的依赖。然后我们需要配置

    #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()
    

      

    #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 学习之路(三十四)数据库多表操作

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

     

  • 相关阅读:
    关于大文件下载
    关于小文件下载
    小文件下载
    AppStore 中的app怎么样生成二维码,来提供下载
    重学STM32---(十)之CAN通信(二)
    重学STM32---(九)之CAN通信(一)
    将博客搬至CSDN
    绑定socket描述符到一个网络设备
    通用 Makefile(及makefile中的notdir,wildcard和patsubst)
    vsftpd 编译安装 及 隐藏版本号
  • 原文地址:https://www.cnblogs.com/leiziv5/p/15590586.html
Copyright © 2020-2023  润新知