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

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

写了几十个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 即可体验完整的数据库操作流程。

---

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

http://www.jsqmd.com/news/67922/

相关文章:

  • 在AI技术唾手可得的今天,挖掘新需求成了创新的关键——某知名多智能体协作框架深度探索
  • 2025年热门的硅胶枕头/3D儿童枕头热门厂家推荐榜单
  • 完整教程:Rust 练习册 :Phone Number与电话号码处理
  • 2025年评价高的枕头信誉优质供应榜(可靠推荐)
  • 2025年点冷机制造商排名:点冷机温度不稳原因解析
  • 2025年中国推荐安全挂锁厂家排行榜:防水安全挂锁专业厂商有
  • 2025年口碑好的粒子机平板机载带全方位厂家推荐(综合榜)
  • shell eval作用
  • 2025年比较好的卷对卷载带/防静电(ESD)载带优质厂商精选榜(口碑优)
  • 应用讯飞星火 Spark X1-32K 打造本地知识助手
  • 【C语言进阶】字符函数与字符串函数1-万字解说 - 教程
  • 2025年口碑好的贴片机供料胶盘/7英寸薄型胶盘厂家热销推荐榜(最新热卖)
  • 2025年知名的大连考研学校热门机构榜
  • 深入解析:得物TiDB升级实践
  • 2025年靠谱的大连考研中介/大连考研学校TOP实力榜
  • 2025年评价高的PC/ABS材质胶盘高口碑厂家推荐(评价高)
  • Flask数据库操作进阶:告别裸写SQL,用ORM提升开发效率
  • 121
  • CTF web题目常见思路
  • 万物皆字符串 PHP 中的原始类型偏执
  • 内容成为企业增长发动机:哪些生成式 AI 工具能真正提升生产力?
  • 哪些生成式 AI 平台最能满足中国企业的行业化需求?全维度对比
  • 2025年加工型辣椒种子品牌口碑推荐前十
  • 生成式 AI 安全怎么做?中国企业最关注的五大数据安全能力
  • 2025年口碑好的大连考公/大连考公费用优选培训班榜
  • 2025年12月江苏徐州金属添加剂工厂哪家强?
  • 2025年金属熔剂供应商推荐:徐州篇
  • 2025年江苏徐州金属熔剂销售厂家推荐
  • 2025年比较好的大连考公笔试班/大连考公学校高性价比推荐
  • 2025年下半年UVLED面光源品牌综合推荐及选购指南