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 學習之路(三十四)數據庫多表操作

 

文章首發在公眾號,歡迎關注。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM