python FastAPI sqlalchemy 数据库模型基类通用模型
作用
用于所有表都需要使用的字段或者方法
实现代码
base.py
#!/usr/bin/python # -*- coding: utf-8 -*- # @time : 2023/2/13 17:43 # @author : pugongying # @description : from sqlalchemy import Column, Integer, String, func, DateTime from sqlalchemy.orm import Session from app.dbs.database import Base class BaseModel(Base): __abstract__ = True #设置为可继承的基础模型,不创建表 id = Column(Integer, primary_key=True, autoincrement=True, comment='id') date_created = Column(DateTime(timezone=True), default=func.now(), comment='创建时间') last_updated = Column(DateTime(timezone=True), default=func.now(), onupdate=func.now(), comment='修改时间') def to_dict(self): model_dict = dict(self.__dict__) del model_dict['_sa_instance_state'] return model_dict Base.to_dict = to_dict # 注意:这个跟使用flask_sqlalchemy的有区别 # 单个对象方法2 def single_to_dict(self): return {c.name: getattr(self, c.name) for c in self.__table__.columns} # 多个对象 def dobule_to_dict(self): result = {} for key in self.__mapper__.c.keys(): if getattr(self, key) is not None: result[key] = str(getattr(self, key)) else: result[key] = getattr(self, key) return result # 配合多个对象使用的函数 @staticmethod def to_json(all_vendors): v = [ven.dobule_to_dict() for ven in all_vendors] return v @staticmethod def bulks_update(db: Session, modelclass, listdict): """ modelclass: 模型名称 listdict: list[dict] """ # print(db, modelclass, listdict) db.bulk_update_mappings(modelclass, listdict) db.commit() @staticmethod def bulks_insert(db: Session, modelclass, listdict): """ modelclass: 模型名称 listdict: list[dict] """ db.bulk_insert_mappings(modelclass, listdict) db.commit()
user_schemas.py
#!/usr/bin/python # -*- coding: utf-8 -*- # @time : 2023/2/3 17:46 # @author : pugongying # @description : 数据验证模型 from typing import List from pydantic import BaseModel class UserTaskAccount(BaseModel): username: str password: str account_ids: List
user.py
#!/usr/bin/python # -*- coding: utf-8 -*- # @time : 2023/3/6 15:49 # @author : pugongying # @description : from typing import List from sqlalchemy import Boolean, Column, Integer, String, DateTime, func from sqlalchemy.orm import Session from app.models.base import BaseModel from app.schemas.user_schemas import UserTaskAccount class UserAccount(BaseModel): __tablename__ = "table_ssssss" # 表名 account_id = Column(String(100), nullable=False, comment='xxxx') username = Column(String(100), nullable=False, comment='xxxx') password = Column(String(100), nullable=False, comment='xxxx') account_type = Column(Integer, default=1, nullable=False, comment='xxxx') deleted = Column(Boolean, default=True, nullable=False, comment='xxxx') # 定义模型方法,直接调用返回需要的数据 @staticmethod def query_task_account(db: Session, username: int) -> List[UserTaskAccount]: result_list = db \ .query(UserAccount.username, func.min(UserAccount.password), func.array_agg(UserAccount.account_id)) \ .filter(UserAccount.deleted == False, UserAccount.account_type == account_type) \ .group_by(UserAccount.username) \ .all() return [UserTaskAccount(username=item[0], password=item[1], account_ids=item[2]) for item in result_list]
分类:
FastAPI
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战