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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 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)


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


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



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
1月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
246 93
|
4月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
162 1
|
3月前
|
缓存 NoSQL Linux
在CentOS 7系统中彻底移除MongoDB数据库的步骤
以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
316 79
|
1月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
290 7
|
1月前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
82 13
|
1月前
|
SQL 关系型数据库 MySQL
MySQL数据库连接过多(Too many connections)错误处理策略
综上所述,“Too many connections”错误处理策略涉及从具体参数配置到代码层面再到系统与架构设计全方位考量与改进。每项措施都需根据具体环境进行定制化调整,并且在执行任何变更前建议先行测试评估可能带来影响。
624 11
|
1月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
324 4
|
1月前
|
安全 关系型数据库 数据管理
阿里云数据库:构建高性能与安全的数据管理系统
阿里云数据库提供RDS、PolarDB、Tair等核心产品,具备高可用、弹性扩展、安全合规及智能运维等技术优势,广泛应用于电商、游戏、金融等行业,助力企业高效管理数据,提升业务连续性与竞争力。

热门文章

最新文章