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

Flask-SQLAlchemy 操作 SQLite 数据库示例

Flask-SQLAlchemy 操作 SQLite 数据库示例

这段代码是一个非常完整的 Flask + Flask-SQLAlchemy 操作 SQLite 数据库的示例,涵盖了从初始化配置到基本 CRUD(增删改查)的全流程。下面我会逐部分解析代码的作用和关键点,帮助你更好地理解它的工作原理。

一、核心库导入与应用初始化

from flask import Flask, render_templatefrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)  # 初始化Flask应用,__name__表示当前模块名,用于定位资源
  • Flask:核心框架,用于创建 Web 应用。

  • render_template:用于渲染 HTML 模板(代码中注释了直接返回 HTML 字符串的方式,也可以用模板)。

  • SQLAlchemy:Flask 的数据库扩展,封装了 SQLAlchemy 的核心功能,简化数据库操作。

二、数据库配置

# 配置SQLite数据库:指定数据库文件为test.db(会自动生成在项目目录)app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'# 关闭“修改追踪”功能(减少内存占用,推荐添加)app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False# 关联数据库与Flask应用db = SQLAlchemy(app)
  • SQLALCHEMY_DATABASE_URI:指定数据库连接地址,这里用 SQLite(文件型数据库),test.db会自动生成在项目根目录。

  • SQLALCHEMY_TRACK_MODIFICATIONS:关闭后减少性能开销,几乎所有场景都建议设为False

  • db = SQLAlchemy(app):创建数据库操作对象db,后续的模型定义、CRUD 都通过它实现。

三、定义数据模型(映射数据库表)

class User(db.Model):# 1. 主键ID:自增整数,每个用户唯一id = db.Column(db.Integer, primary_key=True)# 2. 用户名:最多80字符,唯一(不重复),不能为空username = db.Column(db.String(80), unique=True, nullable=False)# 3. 邮箱:最多120字符,唯一,不能为空email = db.Column(db.String(120), unique=True, nullable=False)# 打印对象时的格式(方便调试)def __repr__(self):return f'<User {self.username}>'
  • User类继承db.Model(Flask-SQLAlchemy 的模型基类),对应数据库中的users表(默认表名为类名小写)。

  • 每个属性通过db.Column定义为表的字段:

    • id:主键(primary_key=True),自增整数(db.Integer)。

    • username:字符串类型(db.String(80)),唯一(unique=True),非空(nullable=False)。

    • email:同username,但长度限制为 120 字符。

  • __repr__:自定义对象的打印格式,调试时print(user)会显示<User 用户名>,更直观。

四、创建数据库表

with app.app_context():# 创建所有定义好的模型对应的表(表已存在则不重复创建)db.create_all()
  • 关键:在 Flask 2.0 + 中,操作数据库(包括创建表)需要在应用上下文中执行,with app.app_context()用于激活上下文。

  • db.create_all():根据模型类自动生成数据库表(如果表不存在)。运行后,项目目录会生成test.db文件。

五、路由与 CRUD 操作(核心逻辑)

@app.route('/')  # 定义根路由,访问http://localhost:5000时执行index函数def index():# 1. 新增数据(Create):添加测试用户(避免重复)if not User.query.filter_by(username='test_user').first():  # 先查是否存在new_user = User(username='test_user', email='test@example.com')  # 创建对象db.session.add(new_user)  # 加入会话(临时存储)db.session.commit()       # 提交会话(真正写入数据库)# 2. 查询数据(Read)all_users = User.query.all()  # 查所有用户target_user = User.query.filter_by(username='test_user').first()  # 按用户名查第一个# 3. 更新数据(Update):修改邮箱if target_user:target_user.email = 'updated_test@example.com'  # 直接修改属性db.session.commit()  # 提交修改(生效)# 4. 删除数据(Delete):暂时注释,避免误删# if target_user:#     db.session.delete(target_user)  # 标记删除#     db.session.commit()             # 提交删除(生效)# 渲染模板或返回HTMLreturn render_template('sqltest.html', all_users=all_users, target_user=target_user)# 也可以直接返回字符串(注释中的方式)

这部分是核心,实现了完整的 CRUD 操作:

1. 新增(Create)
  • 先通过User.query.filter_by(username='test_user').first()检查用户是否存在,避免重复添加。

  • 新建User对象,用db.session.add()加入会话,最后db.session.commit()提交到数据库(必须 commit 才会真正写入)。

2. 查询(Read)
  • User.query.all():查询所有用户,返回列表。

  • User.query.filter_by(username='test_user').first():按条件查询(用户名 = test_user),返回第一个结果(无结果则为None)。

3. 更新(Update)
  • 先查询到目标对象(target_user),直接修改其属性(target_user.email = ...)。

  • 调用db.session.commit()提交修改(无需add,因为对象已在会话中)。

4. 删除(Delete)
  • 先查询到目标对象,用db.session.delete(target_user)标记删除。

  • 调用db.session.commit()提交删除(真正从数据库中移除)。

六、运行应用

if __name__ == '__main__':app.run(debug=True)  # 启动服务器,debug=True表示开发模式(自动重启、显示错误)
  • 运行脚本后,服务器会启动在http://localhost:5000

  • debug=True仅用于开发环境,生产环境必须关闭(避免安全风险)。

运行前的准备与注意事项

  1. 安装依赖

    先执行以下命令安装需要的库:

pip install flask flask-sqlalchemy
  1. 模板文件(可选)

    代码中用了render_template('sqltest.html'),如果需要使用模板:

    如果不想用模板,可以直接使用代码中注释的return f'''...'''方式返回 HTML 字符串。

  • 在项目根目录创建templates文件夹(Flask 默认的模板目录)。

  • templates中创建sqltest.html,示例内容:

<!DOCTYPE html><html><body><h3>所有用户:</h3><ul>{% for user in all_users %}<li>{{ user.username }} - {{ user.email }}</li>{% endfor %}</ul><h3>目标用户:</h3>{% if target_user %}<p>用户名:{{ target_user.username }}</p><p>邮箱:{{ target_user.email }}</p>{% else %}<p>用户不存在</p>{% endif %}</body></html>
  1. 数据库文件

    运行后会自动生成test.db(SQLite 数据库文件),可以用工具(如 DB Browser for SQLite)打开查看表结构和数据。

  2. 重复运行的效果

    第一次运行会创建test_user并设置邮箱为test@example.com,然后更新为updated_test@example.com。后续运行时,因为test_user已存在,不会重复新增,只会显示当前数据。

总结

这段代码非常适合初学者入门,清晰展示了 Flask-SQLAlchemy 的核心用法:从配置数据库、定义模型,到通过会话(db.session)实现增删改查。如果想进一步学习,可以尝试:

  • 扩展模型字段(如添加agegender等)。

  • 实现更复杂的查询(如按条件筛选、排序、分页)。

  • 处理表单提交,动态添加用户(结合request库)。

  • 改用 MySQL/PostgreSQL 数据库(只需修改SQLALCHEMY_DATABASE_URI)。

http://www.dtcms.com/a/561674.html

相关文章:

  • 绍兴在线制作网站潍坊汇聚网站
  • 【大语言模型 111】LLM服务可观测性实战:构建企业级监控体系
  • MATLAB雷达定位系统仿真
  • 免费模板素材网站ppt交互式网页设计
  • 加强门户网站建设与管理办法sticklr wp wordpress
  • 接做网站私活重庆网站建设冒号
  • 万众城网站建设做西点的网站
  • Fatbeans(TCP抓包改包与调试工具) 中文绿色版
  • SNN(TTFS)论文阅读——LC-TTFS
  • dw网站建设的数据库电子商务网站有哪几种
  • Spring相关API
  • 基于W55MH32的WAV音频播放终端
  • 网站排名如何上升游戏网站开发计划书案例目录
  • 公司制作网站网络服务提供者知道网络用户利用其网络服务侵害
  • 谷歌网站收录入口三亚招聘网
  • Python游戏开发入门:Pygame实战
  • 识别H265
  • 建设工程项目在哪个网站查询室内展厅设计公司
  • 怎么做招聘网站赚钱广州网站app制作公司
  • 比特币市场机构化浪潮 XBIT Wallet MEXC钱包打破区域交易壁垒
  • Chainlink: 架起链上链下计算的桥梁
  • 在网上帮做图片的网站南宁电子推广网站
  • 同一家公司可以做几个网站吗自己电脑做网站要下载
  • Ubuntu20.04中如何更换为清华的镜像源
  • Linux之Shell脚本--字符串的拼接
  • ubuntu对docker的常用命令
  • 手表网站免费设计惠州做网站的公司哪家好
  • 基于Llama3.2与LlamaIndex:实现简单的文档检索RAG系统
  • 关于解决hexo博客中无法使用特定letax公式的问题
  • LLVM专栏目录页