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.pswp.cn/diannao/42609.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42609.shtml
英文地址,請注明出處:http://en.pswp.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…