ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

fastapi学习使用2--pydantic和SQLAlchemy使用

2022-06-13 16:33:52  阅读:296  来源: 互联网

标签:SQLAlchemy name -- fastapi 模型 db Operator True id


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

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

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Boolean, Column, Integer, String, DateTime

SQLALCHEMY_DATABASE_URL = "mysql+pymysql://账户:密码@地址:3306/仓库"

# echo=True表示引擎将用repr()函数记录所有语句及其参数列表到日志,创建链接
engine = create_engine(
    SQLALCHEMY_DATABASE_URL, encoding='utf8', echo=True, pool_size=6, pool_recycle=60 * 30
)

# SQLAlchemy中,CRUD是通过会话进行管理的,所以需要先创建会话,
# 每一个SessionLocal实例就是一个数据库session
# flush指发送到数据库语句到数据库,但数据库不一定执行写入磁盘
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# 创建基本映射类
Base = declarative_base()


class BaseModel(Base):
    create_time = Column(DateTime, unique=True)
    update_time = Column(DateTime, unique=True)


class Project(BaseModel):
    __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__)


# 在数据库中创建模型对象的表
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

 

标签:SQLAlchemy,name,--,fastapi,模型,db,Operator,True,id
来源: https://www.cnblogs.com/hufengTE/p/16371279.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有