Flask SQLAlchemy 技术指南

news2024/11/19 5:44:37

文章目录

      • 什么是 Flask SQLAlchemy?
      • 安装 Flask SQLAlchemy
      • 创建 Flask 应用和数据库模型
      • 添加和查询数据
      • 运行 Flask 应用
      • 总结
        • **数据库迁移(Database Migrations)**
        • **复杂查询**
        • **关系模型**
        • **事务处理**
        • **性能优化**
        • **安全性**
        • **扩展功能**

Flask SQLAlchemy 是 Flask 框架的一个扩展,它提供了 ORM(对象关系映射)功能,使得在 Flask 应用中与数据库交互变得更加简单和直观。本文将介绍 Flask SQLAlchemy 的基本用法,并通过示例代码展示如何使用它进行数据库建模和查询操作。
在这里插入图片描述

什么是 Flask SQLAlchemy?

Flask SQLAlchemy 是一个将 SQLAlchemy 集成到 Flask 应用中的扩展。SQLAlchemy 是一个功能强大的 ORM 库,支持多种数据库后端,包括 SQLite、PostgreSQL、MySQL 等。通过 Flask SQLAlchemy,我们可以使用 Python 类和对象来操作数据库,而无需编写大量的 SQL 语句。

安装 Flask SQLAlchemy

在开始之前,我们需要安装 Flask 和 Flask SQLAlchemy:

pip install Flask
pip install Flask-SQLAlchemy

创建 Flask 应用和数据库模型

我们将创建一个简单的 Flask 应用,并定义一个用户(User)模型,该模型包含用户的姓名和年龄等信息。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'  # 使用 SQLite 数据库
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # 关闭跟踪修改

db = SQLAlchemy(app)

# 定义 User 模型
class User(db.Model):
    __tablename__ = 'users'  # 表名
    id = db.Column(db.Integer, primary_key=True)  # 主键
    name = db.Column(db.String(50), nullable=False)  # 用户姓名
    age = db.Column(db.Integer)  # 用户年龄

    def __repr__(self):
        return f'<User {self.name}>'  # 重写字符串表示

# 创建数据库和表
@app.before_first_request
def create_tables():
    db.create_all()  # 创建所有表

添加和查询数据

现在我们可以向数据库中添加数据,并查询数据。在下面的示例中,我们将添加一个用户,并查询所有用户。

@app.route('/add_user/<name>/<int:age>')
def add_user(name, age):
    user = User(name=name, age=age)  # 创建 User 对象
    db.session.add(user)  # 添加到会话
    db.session.commit()  # 提交到数据库
    return f'Added user {name} with age {age}'

@app.route('/get_users')
def get_users():
    users = User.query.all()  # 查询所有用户
    users_list = [f'Name: {user.name}, Age: {user.age}' for user in users]  # 转换为字符串列表
    return '<br>'.join(users_list)  # 返回 HTML 格式的用户列表

运行 Flask 应用

保存上述代码为 app.py 文件,然后在命令行中运行以下命令启动应用:

python app.py

打开浏览器,访问 http://localhost:5000/add_user/John/25 来添加一个用户,然后访问 http://localhost:5000/get_users 查看所有用户。
在这里插入图片描述

总结

当您开始深入使用 Flask SQLAlchemy 时,可以探索更多高级功能和技巧,例如:

数据库迁移(Database Migrations)

使用 Flask-Migrate 扩展来管理数据库模型的迁移,使得在应用更新时能够轻松地更新数据库结构。

复杂查询

利用 SQLAlchemy 提供的丰富查询功能,执行复杂的数据库查询操作,包括过滤、排序、聚合等。

关系模型

定义不同表之间的关系,如一对多、多对一、多对多关系,并利用 SQLAlchemy 提供的关系属性进行操作。

事务处理

学习如何使用 Flask SQLAlchemy 来执行事务操作,保证数据库操作的原子性和一致性。

性能优化

掌握一些性能优化的技巧,如使用索引、批量操作等,提升数据库操作的效率和性能。

安全性

了解如何使用 SQLAlchemy 的参数化查询等技术来防止 SQL 注入等安全漏洞。

扩展功能

探索其他 Flask SQLAlchemy 的扩展和插件,如 Flask-SQLAlchemy-Session、Flask-SQLAlchemy-Pagination 等,以满足特定需求。

通过不断学习和实践,您将能够更加熟练地使用 Flask SQLAlchemy,并在实际项目中发挥其强大的功能和灵活性。祝您在 Flask 开发中取得成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1655478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2024高校网络安全管理运维赛】巨细记录!

2024高校网络安全管理运维赛 文章目录 2024高校网络安全管理运维赛MISC签到考点&#xff1a;动态图片分帧提取 easyshell考点&#xff1a;流量分析 冰蝎3.0 Webphpsql考点&#xff1a;sql万能钥匙 fileit考点&#xff1a;xml注入 外带 Cryptosecretbit考点&#xff1a;代码阅读…

Pyecharts的编程环境准备

一&#xff0c;准备Python编程环境&#xff1a; Python版本&#xff1a;3.10以上&#xff0c;最高版本3.12 https://www.python.org/ 进入官网&#xff0c;点击downloads—>windows进入下载页面&#xff0c;搜索”3.10.6”找到指定版本&#xff0c;下载并安装64位Installer…

可视化-实验四- seaborn工具包绘图基础及关系

一、任务一 1.1 开发环境 多种选择方案&#xff08;大家根据自己的编程习惯&#xff0c;选择适合自己的工具&#xff09;&#xff0c;老师授课如下&#xff1a;Anaconda3Jupter 1.2 特殊包 导入工具包设置中文显示&#xff1a; import matplotlib.pyplot as plt import p…

HTTP常见面试题(二)

3.1 HTTP 常见面试题 HTTP特性 HTTP 常见到版本有 HTTP/1.1&#xff0c;HTTP/2.0&#xff0c;HTTP/3.0&#xff0c;不同版本的 HTTP 特性是不一样的。 HTTP/1.1 的优点有哪些&#xff1f; HTTP 最突出的优点是「简单、灵活和易于扩展、应用广泛和跨平台」。 1. 简单 HTTP…

Metasploit Framework(MSF)从入门到实战(二)

Metasploit Framework&#xff08;MSF&#xff09;从入门到实战&#xff08;一&#xff09;_安装msf更新-CSDN博客 MSF模块介绍 MSF有7个模块&#xff0c;分别对下面目录下的7个子文件夹&#xff1a; auxiliary&#xff08;辅助模块 &#xff09; show auxiliary //查看所有…

vue视图不刷新强制更新数据this.$forceUpdate()

在vue中&#xff0c;更新视图数据&#xff0c;不刷新页面&#xff0c;需要强制更新数据才可以 前言 在对数据就行添加和删除时&#xff0c;发现页面视图不更新&#xff0c;排除发现需要强制更新才可以 点击添加或删除&#xff0c;新增数据和删除就行&#xff0c;但在不使用fo…

二层交换机与路由器连通上网实验

华为二层交换机与路由器连通上网实验 二层交换机是一种网络设备&#xff0c;用于在局域网&#xff08;LAN&#xff09;中转发数据帧。它工作在OSI模型的第二层&#xff0c;即数据链路层。二层交换机通过学习和维护MAC地址表&#xff0c;实现了数据的快速转发和广播域的隔离。 实…

Spring-依赖注入的处理过程

前置知识 1 入口 DefaultListableBeanFactory#resolveDependency 2 每个依赖都有对应的DependencyDescriptor 3 自定绑定候选对象处理器AutowireCapableBeanFactory 注入处理 我们可以看到AutowireCapableBeanFactory中有两个方法&#xff1a; 第一个是单个注入&#xff1a;…

CCF-Csp算法能力认证, 202312-1仓库规划含解析

前言 推荐书目&#xff0c;在这里推荐那一本《算法笔记》&#xff08;胡明&#xff09;&#xff0c;需要PDF的话&#xff0c;链接如下 「链接&#xff1a;https://pan.xunlei.com/s/VNvz4BUFYqnx8kJ4BI4v1ywPA1?pwd6vdq# 提取码&#xff1a;6vdq”复制这段内容后打开手机迅雷…

高职学院建设人工智能专业群可行性分析

一、人工智能技术人员的需求分析 随着科技的迅猛发展和数字化转型的深入&#xff0c;人工智能&#xff08;AI&#xff09;已成为推动产业升级和社会变革的重要力量。从当前行业趋势和技术发展来看&#xff0c;对于人工智能技术人员的需求预计将呈现爆炸性增长的态势。 首先&am…

智慧仓储数字孪生三维可视化平台,提升企业物流效率和转型升级

智慧仓储数字孪生三维可视化平台&#xff0c;提升企业物流效率和转型升级。智慧仓储数字孪生三维可视化平台&#xff0c;正逐渐成为现代企业物流领域的重要工具。它通过集成先进的数字技术&#xff0c;实现仓储管理的全面智能化&#xff0c;为企业的物流效率和转型升级提供了有…

软考143-下午题-【试题二】:E-R图、关系模式

一、分值与目标 15分&#xff0c;目标10 二、题目形式 示例&#xff1a; 三、E-R图的基本图形元素 示例&#xff1a; 3-1、实体 1、弱实体 在现实世界中有一种特殊的联系&#xff0c;这种联系代表实体间的所有 (Ownership) 关系&#xff0c;例如&#xff1a;职工与家属的联系…

WPF/C#:ProgressBar的基本使用

前言 在日常开发过程中&#xff0c;如果遇到需要一段时间才能完成的任务&#xff0c;通常需要给用户一个进度条提示。今天给大家介绍的是WPF/C#中ProgressBar的基本使用。 ProgressBar的介绍 在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;Pr…

AI图书推荐:ChatGPT在真实商业世界中的应用

《ChatGPT在真实商业世界中的应用》 (Unleashing The Power of ChatGPT: A Real World Business Applications)首先概述了ChatGPT及其在对话式人工智能领域的影响。接着&#xff0c;你将深入了解ChatGPT的技术方面&#xff0c;理解机器学习算法和自然语言处理如何在后台工作。然…

【GPT调用】本地使用python调用GPT接口

python调用GPT接口 环境变量设置主调用方法执行结果 环境变量设置 .env文件中配置GPT环境变量 api_key"你的GPT-API-KEY" urlhttps://ai-proxy.ksord.com/wps.openai.azure.com/openai/deployments/gpt-4-32k/chat/completions?api-version2023-09-01-preview主调…

红帽为 Red Hat OpenShift AI 扩大与 Elasticsearch 向量数据库的合作

作者&#xff1a;来自 Elastic Aditya Tripathi 红帽和 Elastic 今天宣布开展合作&#xff0c;以便在 Red Hat OpenShift AI 上集成 Elasticsearch 向量数据库。 Red Hat OpenShift 用户现在可以通过红帽生态系统目录实施 Elasticsearch 以进行向量搜索和检索增强生成 (RAG) 应…

Blender动画与云渲染:创造高质量作品的未来路径

Blender作为开源的3D图形软件&#xff0c;在多个领域广受欢迎。但随着项目复杂度提升&#xff0c;传统渲染方式受限。云渲染技术的兴起突破了这些限制&#xff0c;为创作者提供了更自由、高效的创作环境。 一、Blender动画项目的挑战 传统上&#xff0c;Blender动画渲染需要依…

C++新手村指南:入门基础

目录 C概念 C发展史 C关键字&#xff08;C98&#xff09; 命名空间 命名空间的定义 命名空间的使用 C中的输入&&输出 缺省参数 缺省参数的概念 缺省参数的分类 函数重载 函数重载概念 函数重载实现 引用 引用的概念 引用的特性 常引用 引用的使用场景…

SpringBoot分页查询报错Bug

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 使用pageHepler分页查询报错信息为 class java.util.ArrayList cannot be cast to class com.github.pagehelper.Page问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 实现条件分…

树莓派变小路由器放出热点wifi

环境 树莓派4Bubuntu20 作用 树莓派放出wifi后&#xff0c;笔记本电脑连接树莓派的wifi&#xff0c;并且ip配置在一个网段&#xff0c;就可以互相通信&#xff08;笔记本放出wifi&#xff0c;树莓派连接效果一样&#xff09;&#xff0c;这样的好处是树莓派只要一上电就会自…