首页 > 数据库 >fastapi搭建平台实战教程一:SQLAlchemy生成数据库数据

fastapi搭建平台实战教程一:SQLAlchemy生成数据库数据

时间:2023-10-31 23:12:31浏览次数:29  
标签:comment __ 教程 SQLAlchemy String Column fastapi 数据库 True

除了falsk,SQLAlchemy也能很好的支持fastapi框架。

首先创建一个main.py

from fastapi import FastAPI

app = FastAPI()

@app.post("/register")
def register():
    ...

@app.post("/login")
def login():
    ...

配置数据库

创建db.py,初始化数据库连接对象

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:@localhost:3306/fastapi1?charset=utf8mb4"
# SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"

#创建一个 SQLAlchemy的“引擎”
engine = create_engine(
    SQLALCHEMY_DATABASE_URL
)

#我们创建了一个SessionLocal类的实例,这个实例将是实际的数据库会话。sessionmaker是sqlalchemy2.0的使用方式,1.4要使用Session(engine)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

#我们将用这个类继承,来创建每个数据库模型或类(ORM 模型)
Base = declarative_base()

创建models.py,创建数据库模型

from sqlalchemy import Boolean, Column, ForeignKey, Integer, String,DateTime

from db import Base

class Group(Base):
    __tablename__ = 'group'

    id = Column(Integer, primary_key=True)
    # : name of group
    # : 权限组名称
    name = Column(String(60), comment="权限组名称")
    # a description of a group
    # 权限组描述
    info = Column(String(255), comment="权限组描述")


class User(Base):
    __tablename__ = "user" # 数据库表名
    id = Column(Integer,primary_key=True)
    username = Column(String(24), nullable=False, unique=True, comment="昵称")
    password = Column(String(500), nullable=False, comment="密码")
    nickname = Column(String(100),nullable=True, comment="用户姓名")
    email = Column(String(100), nullable=True,  comment="电子邮箱")
    isadmin = Column(Boolean,default=False,comment="管理员")

class Auth(Base):
    __tablename__ = 'auth'

    id = Column(Integer, primary_key=True)
    # : 权限字段
    auth = Column(String(60), comment="权限字段")
    # : 权限的模块
    endpoint = Column(String(60), comment="路由名称")

在main.py中加入自动创建数据库的语句

import models
from db import engine

models.Base.metadata.create_all(bind=engine)

uvicorn main:app --reload启动就回自动创建数据库了。

models.py创建一个所有表文件的父类,加入创建时间、创建人等基本字段,并将之前表的父类改为InfoCrud

class InfoCrud(Base):
    __abstract__ = True # 作为父类使用,并且不在数据库生成此表
    _create_time = Column('create_time', DateTime, default=datetime.now)
    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now)
    delete_time = Column(DateTime)
    update_user_id = Column(Integer, nullable=True)
    create_user_id = Column(Integer, nullable=True)
    update_user_name = Column(String(50), nullable=True)
    create_user_name = Column(String(50), nullable=True)

class User(InfoCrud):

再次运行,查看数据库可以看到新的父类未生效说明不能更新表结构,只能删除表重建,重建后可以新增父类的字段。

 

标签:comment,__,教程,SQLAlchemy,String,Column,fastapi,数据库,True
From: https://www.cnblogs.com/zerotest/p/17801915.html

相关文章

  • 无涯教程-Docker - 公有存储库
    公共存储库(PublicRepositories)可用于托管可供其他人使用的Docker镜像,Centos,Ubuntu和Jenkins等大多数镜像都可以公开获得,我们还可以通过将镜像发布到DockerHub上的公共存储库来使其可用。首先,让我们回顾一下Docker主机上的镜像,看看可以推送到Docker注册表的内容。在这里,我......
  • 无涯教程-Docker - CMD命令
    Docker有许多指令命令。这些是放置在DockerFile中的命令。CMD指令该命令用于在执行容器时在运行时执行命令。CMDcommandparam1command -这是启动容器时要运行的命令。param1    - 这是输入到命令的参数。该命令将相应执行。在我们的示例中,我们将输入一......
  • 无涯教程-Docker - 文件构建
    在前面的章节中,我们已经看到了各种镜像文件,如Centos,它们是从Dockerhub下载。如果使用Dockerimages命令,则可以看到系统中的现有镜像。从上面的屏幕截图中,我们可以看到有两张镜像:centos和nsenter。但是Docker还为您提供了创建自己的Docker镜像的函数,并且可以借助Dock......
  • 无涯教程-Docker - 启动指令
    在本章中,我们将介绍配置Docker的不同选项。servicedockerstop该命令用于停止Dockerdaemon进程。sudodockerstop,当我们运行上面的命令时,它将产生以下输出-servicedockerstart该命令用于启动Docker守护进程。servicedockerstart,当我们运行上面的命令时,它将产生......
  • 软件测试|Python科学计算神器numpy教程(十二)
    简介NumPy是Python中用于科学计算的一个强大的库,其中包含了丰富的数学和统计函数。这些统计函数允许用户对数组进行各种统计计算,例如平均值、标准差、方差、最大值、最小值等。在本文中,我们将详细介绍NumPy中一些常用的统计函数及其用法。统计函数示例numpy.amin()和numpy.......
  • 无涯教程-Docker - Linux安装
    要开始安装Docker,我们将使用Ubuntu。如果您还没有可以使用OracleVirtualBox部署它。以下屏幕图显示了已在OracleVirtualBox上安装的简单Ubuntu服务器。在系统上已定义了一个名为demo的OS用户,该用户对服务器具有完全的根访问权限。要安装Docker,我们需要遵循以下步骤。步......
  • 无涯教程-C语言 - 输入(Input)&输出(Output)
     C编程提供了一组内置函数来读取给定的输入,并根据需要将其输入到程序中。getchar()和putchar()函数intgetchar(void)  - 函数从屏幕读取下一个可用字符,并将其作为整数返回。intputchar(intc)  - 函数将传递的字符放在屏幕上,并返回相同的字符。#include<stdi......
  • python sqlalchemy批量插入大量数据,性能最佳!
    defcreate_user_items(db:Session,mouse_events,user,events_dict):mouse_events=json.loads(mouse_events)db.execute(models.Sessions.__table__.insert(),[{"user_id":user,"x_coordinate":event["x_cor&q......
  • python sqlalchemy 动态设置表名__tablename__,一个model对应多个table
    fromsqlalchemyimportcreate_engine,Column,BigInteger,Stringfromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemy.ormimportsessionmakerbase=declarative_base()engine=create_engine("postgresql://postgresadmin:[email protected]......
  • 无涯教程-C语言 - 结构(Struct)
    数组允许定义变量的类型,这些变量可以容纳相同种类的多个数据项。同样,结构是C中可用的另一种用户定义的数据类型,它允许组合不同种类的数据项。结构Struct用于表示记录,假设您想定义图书馆中的书籍,您可能需要定义跟踪有关每本书的以下属性-标题title作者author主题subject图......