尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Flask数据库操作三步曲:连接、建模与CRUD实战

Flask数据库操作三步曲:连接、建模与CRUD实战
📅 发布时间:2026/6/20 13:52:49
本文系统介绍了在Flask框架中进行数据库操作的核心步骤。首先解释了使用SQLAlchemy ORM的必要性,然后详细演示了如何配置数据库连接、定义数据模型,并重点通过实例讲解了增删改查(CRUD)四大基本操作的具体实现方法。最后提供了完整的可运行代码参考,帮助初学者快速上手Flask数据库开发。

写了几十个Flask视图函数,数据却还写在TXT文件里?恭喜你,你的项目正卡在从玩具到产品的关键一步!据统计,超过70%的Flask初学者在首次集成数据库时会感到困惑甚至放弃。

本文你将学到:

1. 为什么Flask应用需要ORM这个“翻译官”

2. 三步搞定数据库连接与模型定义

3. 清晰演示增删改查(CRUD)核心操作

阅读指南:本文假设你已有基础Flask知识,将带你平滑过渡到数据库世界。

📚 目录

- ✨ 第一步:为什么选SQLAlchemy?

- 🚀 第二步:连接数据库与定义模型

- 📝 第三步:核心CRUD操作实战

- 💾 完整代码参考与总结

✨ 第一步:为什么选SQLAlchemy?

在Flask中直接写SQL语句就像用手动挡开车——有控制感但效率低。而SQLAlchemy作为Python最强大的ORM(对象关系映射)工具之一,就是你的“自动变速箱”。

ORM的核心价值在于:让你用操作Python对象的方式(类、实例、属性)来操作数据库表,无需关心底层SQL方言的差异。对于Flask,我们通常使用其简化版——Flask-SQLAlchemy扩展。

🚀 第二步:连接数据库与定义模型

万事开头难,但配置其实就三步:安装、连接、定义。

1. 安装与基础配置

# 安装必要的包
# pip install flask-sqlalchemy
from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)
# 配置数据库URI(这里使用SQLite作为示例)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 关闭警告# 创建数据库对象
db = SQLAlchemy(app)

2. 定义你的第一个数据模型

模型(Model)对应数据库中的一张表。我们来定义一个User(用户)模型:

class User(db.Model):# 定义表名(可选,默认会转小写)__tablename__ = 'users'# 定义字段(列)id = db.Column(db.Integer, primary_key=True) # 主键username = db.Column(db.String(80), unique=True, nullable=False)email = db.Column(db.String(120), unique=True, nullable=False)date_created = db.Column(db.DateTime, default=db.func.now()) # 默认当前时间# 可选:定义友好显示对象的方式def __repr__(self):return f'<User {self.username}>'

关键点:db.Column定义了字段类型和约束(如唯一、非空)。定义好模型后,只需一行命令即可创建实际的数据表:

with app.app_context():db.create_all() # 根据所有模型类创建表

📝 第三步:核心CRUD操作实战

CRUD(Create, Read, Update, Delete)是数据库操作的基石。掌握它们,你就掌握了八成日常需求。

C - 创建数据

# 1. 创建对象实例
new_user = User(username='小张', email='zhang@example.com')# 2. 添加到会话(暂存)
db.session.add(new_user)# 3. 提交到数据库(永久保存)
db.session.commit()
print(f'用户 {new_user.username} 创建成功,ID为 {new_user.id}')

R - 查询数据(招式最多)

# 查询所有用户
all_users = User.query.all()# 根据主键查询单个用户
user_by_id = User.query.get(1)# 根据条件过滤查询(常用!)
user_zhang = User.query.filter_by(username='小张').first()
users_with_gmail = User.query.filter(User.email.like('%gmail.com')).all()# 更复杂的查询与排序
recent_users = User.query.order_by(User.date_created.desc()).limit(5).all()

U - 更新数据

# 1. 先查询到要更新的对象
user_to_update = User.query.get(1)# 2. 修改属性
if user_to_update:user_to_update.email = 'new_email@example.com'# 3. 提交更改(无需再次add,对象已在会话中)db.session.commit()print('用户信息已更新')

D - 删除数据

# 1. 查询到要删除的对象
user_to_delete = User.query.get(2)# 2. 删除并提交
if user_to_delete:db.session.delete(user_to_delete)db.session.commit()print('用户已删除')

重要提示:所有修改数据库的操作(增、删、改),最后都必须执行db.session.commit()才会生效!db.session.add()只是将对象放入临时“购物车”。

💾 完整代码参考与总结

将以上步骤整合到一个简单的app.py中:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from datetime import datetimeapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///myapp.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True, nullable=False)email = db.Column(db.String(120), unique=True, nullable=False)date_created = db.Column(db.DateTime, default=datetime.utcnow)def __repr__(self):return f'<User {self.username}>'# 初始化数据库(仅在第一次运行时创建表)
@app.before_first_request
def create_tables():db.create_all()# 一个简单的路由测试
@app.route('/add_user/<name>/<email>')
def add_user(name, email):try:new_user = User(username=name, email=email)db.session.add(new_user)db.session.commit()return f'用户 {name} 添加成功!'except Exception as e:return f'添加失败:{str(e)}'@app.route('/users')
def show_users():users = User.query.all()return {'users': [{'id': u.id, 'name': u.username, 'email': u.email} for u in users]}if __name__ == '__main__':app.run(debug=True)

运行后,访问 /add_user/你的名字/你的邮箱 和 /users 即可体验完整的数据库操作流程。

---

喜欢本文?不要错过✨,点赞👍收藏⭐关注我👆,一起学习更多有用的知识,完善你我的技能树!

相关新闻

  • 在AI技术唾手可得的今天,挖掘新需求成了创新的关键——某知名多智能体协作框架深度探索
  • 完整教程:Rust 练习册 :Phone Number与电话号码处理
  • 2025年点冷机制造商排名:点冷机温度不稳原因解析

最新新闻

  • 2026菏泽黄金回收实测指南:六家门店上门评测 - 余生黄金回收
  • 2026 年 6 月帝舵官方售后门店资质实地查验报告 覆盖全国 60 + 正规服务点 - 亨得利腕表服务中心
  • 上海高铁铁路+机场航道居家隔音怎么做?|静华轩隔音窗|隔绝高铁/轨道低频共振、机场低空轰鸣、沿线窗体震动噪音,居家专属隔声定制 - 维小达科技
  • 2026 年 6 月帝舵官方维修网点升级优化通知 新版咨询热线同步对外开放 - 亨得利腕表服务中心
  • 手机号查询QQ号的终极指南:3分钟找回你的QQ账号
  • 嵌入式GUI实战:emWin的HEADER与ICONVIEW控件深度解析与应用

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号