• fastapi使用教程2pydantic和SQLAlchemy使用


    首先说下SQLAlchemy,这个orm库,如何使用呢?

    创建实例,建立映射类,常见model模型,再create_all创建一下

    from sqlalchemy import Column, Integer, String, DateTime
    from database import Base, engine
    from datetime import datetime
    from sqlalchemy.ext.declarative import declarative_base
    
    
    class BaseModel(Base):
        create_time = Column(DateTime, default=datetime.now(), unique=True)
        update_time = Column(DateTime, default=datetime.now(), onupdate=datetime.now(), unique=True)
    
    
    DeclarativeBase = declarative_base(cls=BaseModel)
    
    
    class Project(DeclarativeBase):
        __tablename__ = "project"
        id = Column(Integer, primary_key=True, index=True)
        name = Column(String(255), unique=True, index=True)
        owner = Column(String(255), unique=True)
        Operator = Column(String(255), unique=True)
    
        def __repr__(self):
            return "{}".format(self.__tablename__)
    
    
    if __name__ == '__main__':
        # 在数据库中创建模型对象的表
        # Base.metadata.clear()
        Base.metadata.create_all(engine)

    pydantic的使用,导入basemode,然后继承该model,设置对应字段要效验的格式,

    from pydantic import BaseModel
    from datetime import datetime
    
    
    class ProjectBase(BaseModel):
        """
        基础模型
        """
        id: str
    
    
    class ProjectCreate(BaseModel):
        """
        请求模型验证:
        name:
        owner:
        Operator:
        """
        name: str
        owner: str
        Operator: str
    
    
    class Project(BaseModel):
        """
        响应模型:
        id:
        name:
        owner,
        Operator,
        create_time,
        update_time
        并且设置orm_mode与之兼容
        """
        id: int
        name: str
        owner: str
        Operator: str
        create_time: datetime = None
        update_time: datetime = None
    
        class Config:
            orm_mode = True

    BaseModel 模型属性

    上面的例子只是展示了模型可以做什么的冰山一角。模型具有以下方法和属性:
    dict() 返回模型字段和值的字典;参看。导出模型
    json() 返回一个 JSON 字符串表示dict();参看。导出模型
    copy() 返回模型的副本(默认为浅拷贝);参看。导出模型
    parse_obj() 如果对象不是字典,则用于将任何对象加载到具有错误处理的模型中的实用程序;参看。辅助函数
    parse_raw() 用于加载多种格式字符串的实用程序;参看。辅助函数
    parse_file() 喜欢parse_raw()但是对于文件路径;参看。辅助函数
    from_orm() 将数据从任意类加载到模型中;参看。ORM模式
    schema() 返回将模型表示为 JSON Schema 的字典;参看。图式
    schema_json() schema()返回;的 JSON 字符串表示形式 参看。图式
    construct() 无需运行验证即可创建模型的类方法;参看。创建没有验证的模型


    fields_set 初始化模型实例时设置的字段名称集
    fields 模型字段的字典
    config 模型的配置类,cf。模型配置

    具体如何使用呢?

    user = Project(id=2, name='name', owner='owner', Operator='Operator')
    print(user.id)  
    #结果就是2

    pydantic.error_wrappers.ValidationError: 1 validation error for Project
    id
    value is not a valid integer (type=type_error.integer)

    结合使用

    from sqlalchemy.orm import Session
    import models, schemas
    
    
    # 通过id查询用户
    def get_user(db: Session, user_id: int):
        return db.query(models.Project).filter(models.Project.id == user_id).first()
    
    
    # 新建用户
    def db_create_user(db: Session, project: schemas.ProjectCreate):
        db_projcet = models.Project(name=project.name, owner=project.owner, Operator=project.Operator)
        db.add(db_projcet)
        db.commit()  # 提交保存到数据库中
        db.refresh(db_projcet)  # 刷新
        return db_projcet

    参考 https://www.cnblogs.com/blueberry-mint/p/14277882.html

  • 相关阅读:
    EffectComposer + ShaderPass 实现分区特效
    C#树形结构格式化
    vue rules 特殊验证添加
    chrome 下载crx插件 提示 程序包无效 解决方案
    正则表达式 手机、正整数、身份证、Email…
    vue 组件 父组件直接获取$emit 的数据
    响应尺寸
    读取、重写 Web.config文件
    ArcGIS License Manager 服务启动后自动停止
    mianshiti
  • 原文地址:https://www.cnblogs.com/hufengTE/p/16371279.html
Copyright © 2020-2023  润新知