FastAPI與SQLAlchemy數據庫集成


title: FastAPI與SQLAlchemy數據庫集成
date: 2025/04/17 15:33:34
updated: 2025/04/17 15:33:34
author: cmdragon

excerpt:
FastAPI與SQLAlchemy的集成通過創建虛擬環境、安裝依賴、配置數據庫連接、定義數據模型和實現路由來完成。核心模塊包括數據庫引擎、會話工廠和聲明性基類。數據模型通過SQLAlchemy定義,路由通過FastAPI實現,支持創建和查詢用戶。測試接口通過curl命令進行,常見報錯包括表不存在、請求體驗證錯誤和會話不可用。高級配置涉及連接池優化和單元測試。

categories:

  • 后端開發
  • FastAPI

tags:

  • FastAPI
  • SQLAlchemy
  • 數據庫集成
  • 依賴注入
  • 數據模型
  • 錯誤處理
  • 單元測試

cmdragon_cn.png cmdragon_cn.png

掃描二維碼關注或者微信搜一搜:編程智域 前端至全棧交流與成長

探索數千個預構建的 AI 應用,開啟你的下一個偉大創意

1. FastAPI與SQLAlchemy同步數據庫集成實戰

1.1 項目初始化與依賴安裝

在項目根目錄執行以下命令創建虛擬環境并安裝依賴:

python -m venv venv
source venv/bin/activate  # Linux/Mac
venv\Scripts\activate.bat  # Windows
pip install fastapi sqlalchemy uvicorn

1.2 數據庫配置核心模塊

創建database.py文件:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker# 數據庫連接配置(使用SQLite示例)
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"# 創建數據庫引擎(關閉SQLite連接池檢查)
engine = create_engine(SQLALCHEMY_DATABASE_URL,connect_args={"check_same_thread": False}
)# 會話工廠(關閉自動提交,啟用自動刷新)
SessionLocal = sessionmaker(autocommit=False,autoflush=False,bind=engine
)# 聲明性基類
Base = declarative_base()def get_db():"""數據庫會話依賴生成器"""db = SessionLocal()try:yield dbfinally:db.close()

1.3 數據模型定義

創建models.py文件:

from sqlalchemy import Column, Integer, String

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77325.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77325.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77325.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OSCP - Proving Grounds - DriftingBlues6

主要知識點 路徑爆破dirtycow內核漏洞提權 具體步驟 總體來講,這臺靶機還是比較直接的,沒有那么多的陷阱,非常適合用來學習 依舊是nmap開始,只開放了80端口 Nmap scan report for 192.168.192.219 Host is up (0.42s latency). Not shown: 65534 cl…

電視盒子 刷armbian

參考 中興電視盒子中興B860AV3.2-M刷Armbian新手級教程-CSDN博客 1.刷安卓9 帶root版本 a. 下載安卓線刷包 鏈接:https://pan.baidu.com/s/1hz87_ld2lJea0gYjeoHQ8A?pwdd7as 提取碼:d7as b.拆機短接 3.安裝usbburning工具 使用方法 ,…

Redisson分布式鎖全攻略:用法、場景與要點

目錄 1. 普通可重入鎖(RLock) 2. 公平鎖(RFairLock) 3. 讀寫鎖(RReadWriteLock) 4. 多重鎖(RedissonMultiLock) 1. 普通可重入鎖(RLock) import org.redisson.Redisson; import org.redisson.api.RLoc…

Node.js 中 Token 原理簡單介紹 + 示例代碼

目錄 ? 什么是 Token? 🔁 原理簡述: 🧩 示例項目:使用 Node.js jsonwebtoken 實現 Token 登錄驗證 📁 文件結構如下: 🔹 server.js(JavaScript) &…

每日OJ_牛客_ruby和薯條_排序+二分/滑動窗口_C++_Java

目錄 ruby和薯條_排序二分/滑動窗口 題目解析 C代碼 Java代碼 ruby和薯條_排序二分/滑動窗口 ruby和薯條 描述: ruby很喜歡吃薯條。 有一天,她拿出了n根薯條。第i根薯條的長度為ai。 ruby認為,若兩根薯條的長度之差在l和r之間&#xf…

從 ComponentActivity 看 Android Activity 的演變與 Jetpack 架構融合

在 Jetpack Compose 出現后,開發者可能會注意到一個變化:項目的主 Activity 默認從過去熟悉的 AppCompatActivity 變成了 ComponentActivity。這個變化并非偶然,而是 Android 架構在向現代組件化演進過程中一個關鍵的轉折點。本文將圍繞 Comp…

Linux 防火墻( iptables )

目錄 一、 Linux 防火墻基礎 1. 防火墻基礎概念 (1)防火墻的概述與作用 (2)防火墻的結構與匹配流程 (3)防火墻的類別與各個防火墻的區別 2. iptables 的表、鏈結構 (1)規則表 …

大數據 - 2. Hadoop - HDFS(分布式文件系統)

前言 為什么海量數據需要分布式存儲技術? 文件過大時,單臺服務器無法承擔,要靠數量來解決。數量的提升帶來的是網絡傳輸、磁盤讀寫、CPU、內存等各方面的提升。 眾多的服務器一起工作,如何保證高效且不出錯 ? 大數…

使用cursor進行原型圖設計

1.下載cursor 2.模式設置: 模型使用claude-3.7-sonnet的think模式 3.引導詞模板: 我想要開發一個中高考英語口語考試的模擬考試系統,我需要將上面的這個應用輸出成高保真的原型圖設計。請考慮以下的規范: 用戶體驗&#xff1…

極狐GitLab 功能標志詳解

極狐GitLab 是 GitLab 在中國的發行版,關于中文參考文檔和資料有: 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 功能標志 (BASIC ALL) 使用功能標志,您可以將應用程序的新功能小批量部署到生產環境中。您可以為部分用戶打開和…

AI與無人駕駛汽車:如何通過機器學習提升自動駕駛系統的安全性?

引言 想象一下,在高速公路上,一輛無人駕駛汽車正平穩行駛。突然,前方的車輛緊急剎車,而旁邊車道有一輛摩托車正快速接近。在這千鈞一發的瞬間,自動駕駛系統迅速分析路況,判斷最安全的避險方案,精…

【NLP 63、大模型應用 —— Agent】

人與人最大的差距就是勇氣和執行力,也是唯一的差距 —— 25.4.16 一、Agent 相關工作 二、Agent 特點 核心特征: 1.專有場景(針對某個垂直領域) 2.保留記憶(以一個特定順序做一些特定任務,記憶當前任務的前…

RAGFlow本地部署教程 :多模態檢索+動態生成,用AI重構企業知識生產力

RAGFlow是一款基于檢索增強生成(RAG)技術的智能工作流平臺,通過整合多源數據檢索與生成式AI模型,優化企業知識管理、智能問答及自動化報告生成,核心功能包括: 多源數據融合:支持數據庫、文檔庫、…

【C/C++】深入理解指針(二)

文章目錄 深入理解指針(二)1.const修飾指針1.1 const修飾變量1.2 const修飾指針變量 2.野指針2.1 野指針成因1.指針未初始化2. 指針越界訪問3.指針指向的空間釋放 2.2 如何規避野指針2.2.1 指針初始化2.2.2 小心指針越界2.2.3 指針變量不再使?時,及時置NULL&#x…

【verilog】在同一個 always 塊中寫了多個“看起來獨立”的 if / if-else,到底誰先誰后,怎么執行?會不會沖突?

🔍 問題本質 在一個 always (posedge clk) 塊中,所有的代碼都是順序執行的。但這不意味著它就像軟件一樣“一條一條執行”,因為最終是電路!電路是并行存在的! Verilog 是硬件描述語言(HDL)&am…

【React】什么是 Hook

useStateuseEffectuseRef 什么是hook?16.8版本出現的新特性。可以在不編寫class組件的情況下使用state以及其它的React特性 為什么有hook?class組件很難提取公共的重用的代碼,然后反復使用;不編寫類組件也可以使用類組件的狀態st…

如何查看自己抖音的IP屬地?詳細教程及如何修改

在當今互聯網時代,IP屬地信息已成為各大社交平臺(如抖音、微博、快手等)展示用戶真實網絡位置的重要功能。以下是關于如何查看抖音IP屬地的詳細教程及常見問題解答,幫助您快速了解相關信息: 一、如何查看抖音賬號的IP屬…

深度學習算力革新:AI服務器在運維工作中的智能化實踐

【導語】作為IT基礎設施服務領域的從業者,我們在日常工作中發現,AI服務器的智能化運維能力正在重塑傳統IDC的管理模式。本文將以DeepSeek系列服務器為例,分享智能算力設備在真實運維場景中的創新應用。 一、傳統服務器集群的運維痛點 在數據…

安裝部署RabbitMQ

一、RabbitMQ安裝部署 1、下載epel源 2、安裝RabbitMQ 3、啟動RabbitMQ web管理界面 啟用插件 rabbitmq數據目錄 創建rabbitmq用戶 設置為管理員角色 給用戶賦予權限 4、訪問rabbitmq

中間件--ClickHouse-4--向量化執行(什么是向量?為什么向量化執行的更快?)

1、向量(Vector)的概念 (1)、向量的定義 向量:在計算機科學中,向量是一組同類型數據的有序集合,例如一個包含多個數值的數組。在數據庫中,向量通常指批量數據(如一列數…