当前位置: 首页 > article >正文

FastAPI + SQLite:从基础CRUD到安全并发的实战指南

核心摘要本文将带你超越FastAPI SQLite的基础CRUD搭建聚焦于安全防护认证、授权、输入验证与并发处理数据库连接池、异步优化两大实战痛点。你会获得一套可直接复用的项目骨架并理解其背后的设计逻辑确保你的应用在业务增长时依然稳健。 主要内容脉络 1. 快速搭建5分钟创建一个带CRUD的FastAPI应用⚡ 模型定义、数据库连接、基础API 2. 安全第一给你的API加上“门禁”和“监控”⚡ OAuth2密码流、JWT令牌、依赖注入保护路由 3. 应对高并发别让数据库连接成为瓶颈⚡ 连接池配置、异步会话管理、后台任务 4. 完整代码与避坑指南⚡ 项目结构、关键配置、常见陷阱 第一部分为什么是FastAPI SQLiteFastAPI就像一个高效、现代的餐厅点餐系统你客户端递上菜单JSON请求厨房后端逻辑立刻开动快速出餐JSON响应。而SQLite则是这家餐厅初期最合适的“本地仓库”——无需复杂配置一个文件搞定所有库存对于中小型应用或原型开发来说轻量且完全够用。但问题来了当顾客并发请求暴增仓库管理员数据库连接手忙脚乱或者有人冒充服务员未授权访问进入后厨。我们今天就要解决这些问题。️ 第二部分从基础CRUD到安全堡垒1. 搭建基础框架首先安装必备工具包pip install fastapi uvicorn sqlalchemy databases[aiosqlite] python-jose[cryptography] passlib[bcrypt]接下来我们定义数据模型并建立连接。SQLAlchemy的ORM让我们能用Python类操作数据库# models.py from sqlalchemy import Column, Integer, String, create_engine from sqlalchemy.ext.declarative import declarative_base DATABASE_URL sqlite:///./test.db # 注意check_same_threadFalse 仅用于SQLite简化示例生产环境需用更安全的方式 engine create_engine(DATABASE_URL, connect_args{check_same_thread: False}) Base declarative_base() class Item(Base): __tablename__ items id Column(Integer, primary_keyTrue, indexTrue) name Column(String, indexTrue) description Column(String, nullableTrue) # 创建表 Base.metadata.create_all(bindengine)然后编写FastAPI的核心CRUD接口# main.py (基础版) from fastapi import FastAPI, Depends, HTTPException from sqlalchemy.orm import Session from . import models from .database import SessionLocal, engine app FastAPI() # 依赖项获取数据库会话 def get_db(): db SessionLocal() try: yield db finally: db.close() app.post(/items/) def create_item(name: str, description: str None, db: Session Depends(get_db)): db_item models.Item(namename, descriptiondescription) db.add(db_item) db.commit() db.refresh(db_item) return db_item app.get(/items/{item_id}) def read_item(item_id: int, db: Session Depends(get_db)): item db.query(models.Item).filter(models.Item.id item_id).first() if item is None: raise HTTPException(status_code404, detailItem not found) return item # ... 更新和删除接口类似2. 构筑安全防线 警告以下安全设置是生产应用的基石切勿跳过。把API直接暴露在网上就像把家钥匙放在门垫下。我们需要认证你是谁和授权你能干什么。我们采用OAuth2密码流业界标准与JWTJSON Web Tokens组合。第一步处理密码。永远不要明文存储密码# security.py from passlib.context import CryptContext pwd_context CryptContext(schemes[bcrypt], deprecatedauto) def verify_password(plain_password, hashed_password): return pwd_context.verify(plain_password, hashed_password) def get_password_hash(password): return pwd_context.hash(password)第二步创建和验证JWT令牌。# auth.py from jose import JWTError, jwt from datetime import datetime, timedelta SECRET_KEY your-secret-key-change-this-in-production # 生产环境必须用强密钥且从环境变量读取 ALGORITHM HS256 ACCESS_TOKEN_EXPIRE_MINUTES 30 def create_access_token(data: dict): to_encode data.copy() expire datetime.utcnow() timedelta(minutesACCESS_TOKEN_EXPIRE_MINUTES) to_encode.update({exp: expire}) encoded_jwt jwt.encode(to_encode, SECRET_KEY, algorithmALGORITHM) return encoded_jwt async def get_current_user(token: str Depends(oauth2_scheme), db: Session Depends(get_db)): credentials_exception HTTPException(status_code401, detail无效凭证) try: payload jwt.decode(token, SECRET_KEY, algorithms[ALGORITHM]) username: str payload.get(sub) if username is None: raise credentials_exception except JWTError: raise credentials_exception user db.query(models.User).filter(models.User.username username).first() if user is None: raise credentials_exception return user第三步用依赖项保护路由。现在只有携带有效令牌的请求才能创建项目app.post(/secure-items/) def create_secure_item( item_data: schemas.ItemCreate, db: Session Depends(get_db), current_user: models.User Depends(get_current_user) # 关键的保护层 ): # 现在可以安全地创建因为用户已通过认证 ...⚡ 第三部分驯服并发——连接池与异步当100个顾客同时点餐只有1个服务员数据库连接会怎样拥堵SQLite在默认设置下对并发的支持较弱但通过正确配置连接池可以极大改善。核心使用databases库和异步SQLAlchemy。# database_async.py from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession from sqlalchemy.orm import sessionmaker # 使用aiosqlite驱动 ASYNC_DATABASE_URL sqliteaiosqlite:///./test_async.db async_engine create_async_engine(ASYNC_DATABASE_URL, pool_pre_pingTrue, pool_size10, max_overflow20) AsyncSessionLocal sessionmaker( bindasync_engine, class_AsyncSession, expire_on_commitFalse ) async def get_async_db(): async with AsyncSessionLocal() as session: yield session # 在FastAPI路由中使用 app.post(/async-items/, response_modelschemas.Item) async def create_async_item( item: schemas.ItemCreate, db: AsyncSession Depends(get_async_db) ): db_item models.Item(**item.dict()) db.add(db_item) await db.commit() await db.refresh(db_item) return db_item关键参数解释-pool_size10保持10个常开连接随时待命。-max_overflow20允许在繁忙时临时创建最多20个额外连接。-pool_pre_pingTrue自动检查连接是否存活避免使用已断开的连接。重要对于发送邮件、处理大文件等耗时但非数据库密集型操作务必使用BackgroundTasks避免阻塞主线程影响API响应速度。 第四部分整合与避坑指南项目结构建议your_project/ ├── main.py # FastAPI应用创建和路由聚合 ├── models.py # SQLAlchemy数据模型 ├── schemas.py # Pydantic请求/响应模型用于数据验证 ├── crud.py # 核心的数据库操作函数 ├── database.py # 数据库引擎和会话工厂同步/异步 ├── auth.py # 认证、令牌相关函数 ├── security.py # 密码哈希函数 └── dependencies.py # 可重用的FastAPI依赖项一个强化版的主文件示例# main.py 精简示例 from fastapi import FastAPI, Depends, HTTPException, BackgroundTasks from fastapi.middleware.cors import CORSMiddleware from . import models, schemas, crud, auth from .database import AsyncSessionLocal, get_async_db app FastAPI(titleMy Secure API) # 添加CORS中间件根据需求配置 app.add_middleware(CORSMiddleware, allow_origins[*]) # 生产环境应指定具体域名 app.post(/token) async def login_for_access_token(form_data: OAuth2PasswordRequestForm Depends(), db: AsyncSession Depends(get_async_db)): user await authenticate_user(form_data.username, form_data.password, db) if not user: raise HTTPException(status_code400, detail用户名或密码错误) access_token auth.create_access_token(data{sub: user.username}) return {access_token: access_token, token_type: bearer} app.get(/users/me/) async def read_users_me(current_user: models.User Depends(auth.get_current_user)): return current_user # 受保护的、异步的、带后台任务的路由示例 app.post(/items-with-notify/) async def create_item_notify( item: schemas.ItemCreate, background_tasks: BackgroundTasks, db: AsyncSession Depends(get_async_db), current_user: models.User Depends(auth.get_current_user) ): db_item await crud.create_user_item(dbdb, itemitem, user_idcurrent_user.id) # 假设有个发送通知的函数 background_tasks.add_task(send_notification, f新项目 {item.name} 已创建) return db_item必须牢记的避坑点1️⃣SQLite适用于开发与轻量生产。用户量巨大或写入频繁时考虑PostgreSQL或MySQL。2️⃣SECRET_KEY是生命线。必须通过环境变量传入且定期更换。3️⃣连接池参数需按压调整。pool_size和max_overflow不是越大越好根据实际负载测试找到甜蜜点。4️⃣善用异步async/await。在I/O等待时释放CPU但确保整个调用链数据库驱动、HTTP客户端都支持异步。5️⃣验证所有输入。始终使用Pydantic模型验证请求数据这是防止注入和错误数据的第一道防线。

相关文章:

FastAPI + SQLite:从基础CRUD到安全并发的实战指南

核心摘要本文将带你超越FastAPI SQLite的基础CRUD搭建,聚焦于安全防护(认证、授权、输入验证)与并发处理(数据库连接池、异步优化)两大实战痛点。你会获得一套可直接复用的项目骨架,并理解其背后的设计逻辑…...

MySQL

我目前正在学习SQL语句,我所了解到的MySQL其实是一堆服务器,在下载服务器的时候,可以选择下载一些客户端,MySQL会自带一些客户端,像类似于终端的小黑框,还有什么bench;我还是喜欢外观好看的客户端 !我学SQL语句目前学到了数据类型,有数值型的,字符型的,二进制型的,值得一提的是…...

OpenCore Legacy Patcher终极指南:让老旧Mac焕发新生的完整方案

OpenCore Legacy Patcher终极指南:让老旧Mac焕发新生的完整方案 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher&#xf…...

N_m3u8DL-CLI-SimpleG:Windows平台最简M3U8视频下载工具完全指南

N_m3u8DL-CLI-SimpleG:Windows平台最简M3U8视频下载工具完全指南 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 如果你正在寻找一款简单易用的M3U8视频下载工具&…...

一步步教你:星图平台部署Qwen3-VL:30B完整流程,Clawdbot飞书集成实战

一步步教你:星图平台部署Qwen3-VL:30B完整流程,Clawdbot飞书集成实战 想象一下这个场景:你的团队在飞书群里讨论产品设计,有人发了一张UI截图问“这个按钮位置是不是太靠下了?”;财务同事上传了一张发票照…...

Python智能内存回收实战:3种GC策略对比+4个生产级调优参数配置(附压测数据)

第一章:Python智能体内存管理策略生产环境部署在高并发、长生命周期的Python智能体服务中,内存管理直接影响系统稳定性与响应延迟。默认的CPython引用计数循环垃圾回收(GC)机制在动态对象频繁创建销毁的场景下易引发内存抖动和不可…...

如何用GPU加速的MediaPipe TouchDesigner插件实现实时视觉交互

如何用GPU加速的MediaPipe TouchDesigner插件实现实时视觉交互 【免费下载链接】mediapipe-touchdesigner GPU Accelerated MediaPipe Plugin for TouchDesigner 项目地址: https://gitcode.com/gh_mirrors/me/mediapipe-touchdesigner MediaPipe TouchDesigner插件是一…...

实战派指南:用MaPLe思路优化你的CLIP下游任务,附关键配置与避坑建议

实战派指南:用MaPLe思路优化你的CLIP下游任务,附关键配置与避坑建议 当CLIP遇上业务场景,90%的开发者都会遇到相同的问题:模型在新类别上的表现总是不尽如人意。上周团队用默认参数跑跨模态检索任务时,基类准确率82%的…...

大模型RL算法梳理:从全量词元到部分词元的路径演化

一、 引言:大模型强化学习算法的演化格局 近年来,以 OpenAI 的 o1 系列、DeepSeek 的 R1,以及 Qwen 系列模型为代表,大语言模型在数学证明、代码生成等长链路推理任务中展现出更强的稳定性与推理深度。 在这一背景下,面…...

ARP 协议超详细讲解

前言网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须要包含目的MAC地址&…...

Spring AI 流式输出底层原理解析

在 AI 应用开发中,流式输出早已成为提升用户体验的核心能力——像 ChatGPT 那样的打字机式实时回复,既能避免用户长时间干等,又能解决长连接超时问题,是 AI 产品的必备特性。 一、流式输出的两种技术,不是对立而是“底…...

【个人推荐】一些好用的录音转写工具

因为助教课备课的缘故,需要录制讲座的音频以整理知识点。一次讲座的音频内容很长,即使3x速快进播放依然很耗费时间,因此录音转写的需求浮现了出来。于是闲暇之余探索了下市面上的录音转写工具,浅浅记录下体验。 下面主要推荐三款…...

Ollama在Apple Silicon上预览,性能大提升

2026年3月30日,Ollama开启在Apple silicon上的预览,由苹果MLX框架支持,解锁新性能,加速繁重工作,还在多方面有显著改进。MLX驱动,性能飞升基于Apple silicon的Ollama构建在MLX框架上,利用统一内…...

聚点智行:WorkBuddy 辅助开发 AI 地图智能应用实战

一、从痛点到创意:一个真实场景的启发 作为一名经常组织朋友聚会的"社交达人",我遇到了一个看似简单却让人头疼的问题:每次约饭,大家都在问"在哪见?" 张三住在回龙观,李四在东直门&…...

【材料】吸波材料的电导损耗和极化损耗【含Matlab源码 15266期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…...

2026 年提词器 App 的新方向:AI 改稿 + 语速匹配,正在重新定义“读稿“这件事

核心结论:2026 年提词器 App 已经从"滚字幕"进化到"懂你怎么说"。AI 语速匹配、智能跟读、违禁词检测正在成为新标配,而在综合体验上,拍摄提词器是目前把这些能力整合得最完整的一款产品。一、提词器 App 正在经历一次代…...

微型LORA数传模块:科技赋能,传统楼宇智能蜕变

微型LoRa数传模块凭借小体积、低功耗、远距离、强穿透、易部署的核心优势,是智慧楼宇实现无线化、低成本、广覆盖物联网感知与控制的理想选择,尤其适合老旧楼宇改造与新建楼宇的轻量化智能化升级。一、核心优势(适配智慧楼宇场景)小体积易安装&#xff1…...

十分钟用快马AI搭建中科院期刊分区查询工具原型

最近在帮实验室整理投稿期刊清单时,发现中科院分区查询是个高频需求。每次都要登录官网、输入验证码、反复跳转页面,特别影响效率。于是想做个简易查询工具,正好用InsCode(快马)平台试试快速原型开发,没想到十分钟就搭出了可用版本…...

AI图像增强工具Real-ESRGAN-GUI:让模糊影像重获新生的完整指南

AI图像增强工具Real-ESRGAN-GUI:让模糊影像重获新生的完整指南 【免费下载链接】Real-ESRGAN-GUI Lovely Real-ESRGAN / Real-CUGAN GUI Wrapper 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN-GUI 你是否曾遇到珍藏的老照片因年代久远变得模糊不…...

【论文速递】BubbleRAG:为“黑盒”知识图谱打造高召回、高精度的证据检索引擎

黑盒知识图谱检索中的三个挑战:语义实例化不确定性、结构路径不确定性、证据比较不确定性 01 研究背景 在复杂问答(如多跳推理、专家识别)任务中,基于知识图谱(KG)的检索增强生成(RAG&#x…...

GT New Horizons材质包精选:10款提升沉浸体验的视觉升级方案

GT New Horizons材质包精选:10款提升沉浸体验的视觉升级方案 【免费下载链接】GT-New-Horizons-Modpack A big progressive questing modpack for Minecraft 1.7.10 balanced around the mod GregTech. 项目地址: https://gitcode.com/GitHub_Trending/gt/GT-New-…...

别再看水刊了!智能故障诊断领域投稿,这20+个SCI期刊才是你的目标(附避坑指南)

智能故障诊断领域投稿指南:20高价值SCI期刊与避坑策略 对于从事智能故障诊断研究的学者而言,选择合适的SCI期刊投稿是研究成果获得认可的关键一步。本文将系统梳理该领域的优质期刊资源,帮助您避开常见陷阱,提高投稿成功率。 1. 智…...

2026最权威的AI写作神器解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在学术研究范畴之内,人工智能技术的深度交融催生出了多种具备专业性的学术辅助平…...

音乐留学路上,这些坑我替你踩过了|纯干货分享

写给正在准备或即将踏上音乐留学之路的你嘿,准备音乐留学的你。我知道你现在可能既兴奋又焦虑,手里攥着梦想,却不知道下一步该往哪走。别慌,作为过来人,我想跟你聊点实在的。"音乐留学不是终点,而是你…...

DBeaver驱动包终极指南:一键配置30+数据库,彻底告别网络依赖

DBeaver驱动包终极指南:一键配置30数据库,彻底告别网络依赖 【免费下载链接】dbeaver-driver-all dbeaver所有jdbc驱动都在这,dbeaver all jdbc drivers ,come and download with me , one package come with all jdbc drivers. 项目地址: …...

Potree 点云可视化实战指南:从基础配置到高级测量技巧

1. Potree点云可视化入门指南 第一次接触Potree时,我被它处理海量点云数据的能力震撼到了。这个基于WebGL的开源库,能让普通浏览器流畅渲染上亿级别的点云数据。想象一下,不用安装专业软件,打开网页就能查看精细的激光扫描模型&am…...

如何用Mi-Create实现小米穿戴设备表盘个性化设计?

如何用Mi-Create实现小米穿戴设备表盘个性化设计? 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create Mi-Create是一款专为2021年及以后发布的小米穿戴…...

告别水印烦恼!3步轻松去水印,新手秒上手。

找到心仪的图片有水印、做设计好不容易找到的素材有水印、下载好看的壁纸有水印,遇到的好图全被水印扫兴?PS去水印,操作复杂,学习成本高,浪费时间;用专业去水印工具,收费昂贵,还有广…...

杨立昆新模型杀疯了,1500万参数单GPU就能碾压大厂?

就在前几天,AI教父、图灵奖得主杨立昆刚发了个新模型,名叫LeWorldModel,论文一发出,整个圈子瞬间炸锅。说出来你们可能都不信——这货只有1500万参数,单块GPU几个小时就能训完,随便一个研究者都拉起来跑一遍…...

AI 视频生成美女跳舞测评 | 顶级 Prompt实测版(Grok Imagine、Kling AI 3.0、Veo 3.1)

兄弟们,AI 视频生成已经卷到飞起了!之前写小黄文靠grok,现在生成“美女舞蹈”视频也得靠它。 今天上手实测截至今天热门的3款视频生成工具,专攻“美女跳舞”这个高难度场景:动作流畅度、人物一致性、性感画面感、提示…...