FastAPI+SQLAlchemy数据库连接

FastAPI+SQLAlchemy数据库连接

目录

  • FastAPI+SQLAlchemy数据库连接
    • 配置数据库连接
    • 创建表模型
    • 创建alembic迁移文件
      • 安装+初始化
      • 编辑env.py
      • 编辑alembic.ini
      • 迁移数据库
    • 视图函数查询

配置数据库连接

# db.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmakerDATABASE_URL = "mysql+pymysql://root:7997@localhost/fastapidemo"engine = create_engine(DATABASE_URL,pool_size=10,            # 设置连接池大小max_overflow=20,         # 设置连接池最大溢出连接数量pool_timeout=30,         # 设置连接超时时间pool_recycle=1800,       # 设置连接的回收时间
)SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

创建表模型

from sqlalchemy import Column, Integer, String, ForeignKey, Table
from sqlalchemy.orm import DeclarativeBase, relationshipclass Base(DeclarativeBase):__abstract__ = True  # 标记为抽象基类,防止直接创建表@classmethoddef get_all(cls, session):return session.query(cls).all()book_press = Table('book_press', Base.metadata,Column('book_id', Integer, ForeignKey('book.id'), primary_key=True),Column('press_id', Integer, ForeignKey('press.id'), primary_key=True))class Book(Base):__tablename__ = 'book'id = Column(Integer, primary_key=True, autoincrement=True)title = Column(String(15), nullable=False, unique=True)author_id = Column(Integer, ForeignKey('author.id'))author = relationship('Author', backref='books', cascade='all,delete')press = relationship('Press', backref='books', secondary=book_press)class Author(Base):__tablename__ = 'author'id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String(15), nullable=False, unique=True)age = Column(Integer, nullable=False)class Press(Base):__tablename__ = 'press'id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String(15), nullable=False, unique=True)if __name__ == '__main__':from db import engineBase.metadata.create_all(engine)

创建alembic迁移文件

安装+初始化

pip install alembic
alembic init alembic

编辑env.py

# env.py
from logging.config import fileConfig
from sqlalchemy import engine_from_config
from sqlalchemy import pool
from alembic import context# 导入你的 Base 和模型
from module import Base, Book, Author, Pressconfig = context.config# 默认None 替换成你的Base
target_metadata = Base.metadata
# 其他配置...

编辑alembic.ini

# alembic.ini
sqlalchemy.url = mysql+pymysql://root:7997@localhost/fastapidemo

迁移数据库

alembic revision --autogenerate
alembic upgrade head

视图函数查询

# main.py
from fastapi import FastAPI, Request, Depends
from pydantic import BaseModel
from sqlalchemy.orm import Sessionfrom db import SessionLocal
from orm import Authorapp = FastAPI()
session = SessionLocal()def get_db():db = SessionLocal()try:yield dbfinally:db.close()class Item(BaseModel):pass@app.get("/api/")
async def root(db: Session = Depends(get_db)):# 直接用session查询res = db.query(Author).all()# 调用模型类的方法查询res2 = Author.get_all(db)print(res[0].name)print(res2[0].name)return {f"作者名:{res[0].name},{res2[0].name}"}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/42609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9、程序化创意

程序化创意 程序化创意(Programmatic Creative)是指通过自动化的方式制作并优化广告创意,以提高广告效果。针对不同受众的多样化需求,以及同一受众在不同场景下的消费需求,程序化创意能够自动生成个性化的精准创意&am…

《C语言》预处理

文章目录 一、预定义符号二、#define定义常量三、#define定义宏四、宏更函数的对比五、#和##1、#运算符2、##运算符 一、预定义符号 C语言设置了一些预定义符号,可以直接使用,在预处理期间进行处理的。 __FILE__//进行编译的源文件 __LINE__//文件当前的…

在网站存在漏洞的情况下强化安全防御

一、引言 网络安全是一个持续的战斗,尤其是在网站存在已知或未知漏洞的情况下。本文将探讨如何在网站存在漏洞的情况下,采取有效措施进行安全防御。 二、理解漏洞 首先,我们需要理解网站的漏洞。这些可能包括SQL注入、跨站脚本&#xff08…

【数据结构与算法】插入排序

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法》 期待您的关注 ​

深入Laravel服务容器:构建灵活应用的秘诀

标题:深入Laravel服务容器:构建灵活应用的秘诀 Laravel框架的服务容器是一个强大的工具,它负责管理类的依赖关系和执行依赖注入(DI)。服务容器是Laravel依赖注入系统的核心,使得应用组件之间的耦合度降低&…

一周速递|全球车联网产业动态(2024年7月7日)

政策法规 1、7月5日,工业和信息化部部长金壮龙在新闻发布会上表示,新兴产业要培育壮大。对新材料、人工智能、智能网联新能源汽车、新型储能、氢能、生物制造、商业航天、低空经济等新兴产业,要继续用好国内大市场和丰富应用场景&#xff0c…

人工智能、机器学习、神经网络、深度学习和卷积神经网络的概念和关系

人工智能(Artificial Intelligence,缩写为AI)--又称为机器智能,是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是智能学科重要的组成部分,它企图了解智能的实质…

【问题解决】 pyocd 报错 No USB backend found 的解决方法

pyocd 报错 No USB backend found 的解决方法 本文记录了我在Windows 10系统上遇到的pyocd命令执行报错——No USB backend found 的分析过程和解决方法。遇到类似问题的朋友可以直接参考最后的解决方法,向了解问题发送原因的可以查看原因分析部分。 文章目录 pyoc…

排序-java(插入排序和选择排序)

一,分类 主要的排序大致分为以下几类: 1,插入排序,又分为直接插入排序和希尔排序 2,选择排序,又分为选择排序和堆排序 3,交换排序,又分为冒泡排序和快速排序 4,归并…

springboot配置扫描生效顺序

文章目录 举例分析项目结构如下noddles-user-backend 两个配置文件noddles-user-job 配置文件noddles-user-server 配置文件问题:server和Job启动时对应加载的数据库配置为哪一个? 总结 在微服务架构中,backend模块会定义一个基础的配置文件,…

Report Design Analysis报告之logic level详解

目录 一、前言 二、Logic Level distribution 2.1 logic level配置 2.2 Logic Level Distribution报告 2.3 Logic Level 报告详情查看 2.4 Route Distributions 报告详情查看 2.5 示例代码 一、前言 ​在工程设计中,如果需要了解路径的逻辑级数,可…

CentOS7安装部署Anaconda

文章目录 CentOS7安装部署Anaconda一、前言1.组件2.环境 二、正文1.下载安装脚本2.安装Anaconda3.常用指令 CentOS7安装部署Anaconda 一、前言 1.组件 Anaconda 开源的Anaconda个人版 (正式为Anaconda发行版)是在Linux,Windows和Mac OS X上…

卷积神经网络基础篇

文章目录 1、卷积层1.1、激活函数1.3、sigmoid1.4、Tanh1.5、ReLU1.6、Leaky ReLU1.7、误差计算 2、池化层3、全连接层4、CNN训练 参考链接1 参考链接2 1、卷积层 卷积层(Convolutional layer),这一层就是卷积神经网络最重要的一个层次&…

动手学深度学习(Pytorch版)代码实践 -循环神经网络- 56门控循环单元(`GRU`)

56门控循环单元(GRU) 我们讨论了如何在循环神经网络中计算梯度, 以及矩阵连续乘积可以导致梯度消失或梯度爆炸的问题。 下面我们简单思考一下这种梯度异常在实践中的意义: 我们可能会遇到这样的情况:早期观测值对预测…

机器人动力学模型及其线性化阻抗控制模型

机器人动力学模型 机器人动力学模型描述了机器人的运动与所受力和力矩之间的关系。这个模型考虑了机器人的质量、惯性、关节摩擦、重力等多种因素,用于预测和解释机器人在给定输入下的动态行为。动力学模型是设计机器人控制器的基础,它可以帮助我们理解…

html的浮动作用详解

HTML中的“浮动”(Float)是一个CSS布局技术,它原本设计用于文本环绕图像或实现简单的布局效果,比如并排排列元素。然而,随着Web开发的演进,浮动也被广泛用于更复杂的页面布局设计中,尽管现代CSS…

2024/7/7周报

文章目录 摘要Abstract文献阅读题目问题本文贡献问题描述图神经网络Framework实验数据集实验结果 深度学习MAGNN模型相关代码GNN为什么要用GNN?GNN面临挑战 总结 摘要 本周阅读了一篇用于多变量时间序列预测的多尺度自适应图神经网络的文章,多变量时间序…

SAP已下发EWM的交货单修改下发状态

此种情况针对EWM未接收到ERP交货单时,可以使用此程序将ERP交货单调整为未分配状态,在进行调整数据后,然后使用VL06I(启用自动下发EWM配置,则在交货单修改保存后会立即下发EWM)重新下发EWM系统。 操作步骤如…

3ds Max渲染曝光过度怎么办?

3dmax效果图云渲染平台——渲染100 以3ds Max 2025、VR 6.2、CR 11.2等最新版本为基础,兼容fp、acescg等常用插件,同时LUT滤镜等参数也得到了同步支持。 注册填邀请码【7788】可领30元礼包和免费渲染券哦~ 遇到3ds Max渲染过程中曝光过度的问题&#xf…

SLF4J的介绍与使用(有logback和log4j2的具体实现案例)

目录 1.日志门面的介绍 常见的日志门面 : 常见的日志实现: 日志门面和日志实现的关系: 2.SLF4J 的介绍 业务场景(问题): SLF4J的作用 SLF4J 的基本介绍 日志框架的绑定(重点&#xff09…