Flask SQLAlchemy 技术指南

文章目录

      • 什么是 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 SQLAlchemyapp = 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.mzph.cn/pingmian/9337.shtml

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

相关文章

深化产教融合,泰迪智能科技助力西南林业大学提质培优

2024年5月7日&#xff0c;泰迪智能科技昆明分公司院校部总监查良红和数据部负责人余雄亮赴西南林业大学理学院就工作室共建事宜进行交流会谈。西南林业大学理学院院长张雁、党委副书记魏轶、副院长谢爽、就业负责人罗丽及学生代表参与本次交流会。 会议伊始&#xff0c;谢副院长…

邮件大附件系统如何进行安全、高效的大附件发送?

邮件大附件系统是一套解决传统电子邮件系统&#xff0c;在发送大文件时遇到限制的解决方案。由于传统电子邮件系统通常对附件大小有限制&#xff0c;这使得发送大文件变得困难。邮件大附件系统通过各种技术手段&#xff0c;允许用户发送超过传统限制的大文件&#xff0c;通常在…

Java面试常见问题

操作系统 1.Q: 在操作系统中&#xff0c;什么时候会发生用户态到内核态的切换 A: 操作系统中&#xff0c;用户态和内核态是两种不同的权限级别&#xff0c;他们对应着不同的执行环境和执行权限。用户态事指程序在一般的运行情况下的的级别&#xff0c;它具有别较低的权限级别&…

Civitai 转 diffusers 的 base model

Civitai 转 diffusers 的 base model Q1 Q1 pipe StableDiffusionControlNetImg2ImgPipeline.from_pretrained(# "runwayml/stable-diffusion-v1-5", "/data/model/basemodel/realistic_v10BAKEDVAE.safetensors",controlnetcontrolnet, torch_dtypetorc…

华为ICT学院教师指南(HCAI认证)结课测试

华为基于“平台+生态”战略,坚持联合教育培训机构、行业协会及合作伙伴等各类资源,共同构筑ICT人才生态良性发展的使能平台,这其中华为的角色有哪些? 0 人才标准的制定者 1 人才联盟的建设者 2 人才价值的传播者 3 以上全部 下列哪些技术方向属于华为授权课程? 0 网络…

[Spring框架] 手写Spring

目录 一、背景 二、简易版Spring代码 三、使用自定义Spring代码 四、总结 一、背景 作为一个后端程序员&#xff0c;Spring框架是在开发中必不可少的&#xff0c;相信很多人都学过Spring的底层原理并且看过很多源码。但是对我来说&#xff0c;实操是一个会加深对代码的理解…

07-面向对象编程(基础部分)

学习java最核心最重要的就是要理解面向对象。 1. 类与对象 1.1 介绍 类是抽象的&#xff0c;概念的&#xff0c;代表一类事物&#xff0c;比如人类&#xff0c;猫类&#xff0c;狗类.., 即它是数据类型。 对象是具体的&#xff0c;实际的&#xff0c;代表一个具体事物,&…

Leetcode227. 基本计算器 II

Every day a Leetcode 题目来源&#xff1a;227. 基本计算器 II 解法1&#xff1a;单栈模拟 因为没有括号&#xff0c;所以可以简化成单栈。 代码&#xff1a; class Solution { public:int calculate(string s){vector<int> nums;char preSign ;int num 0;int n …

可以修改linux 文件的所有者吗

是的&#xff0c;你可以修改Linux文件的所有者。这通常是通过chown&#xff08;change owner&#xff09;命令来完成的。以下是使用chown命令的一些示例&#xff1a; 更改文件的所有者&#xff1a; chown new_owner file.txt这条命令会将file.txt的所有者更改为new_owner。 同…

如果数据给的是树形 转好的树形结构并且是有两个二级children的话 该如何写?

第一我们要自己写一个children 并且张数据里面的所要渲染的二级进行赋值 赋给我们新建的children 以下是代码转树形赋值 organ().then(function (res) {console.log(res); // 成功回调// setLists(res.data.data)res.data.data res.data.data.map((obj) > ({...obj, // …

Kafka 面试题(三)

1. 简述什么是 Kafka 的 Broker &#xff1f; Kafka的Broker是Kafka集群中的一个核心组件&#xff0c;扮演着消息代理的角色。它是生产者和消费者之间的中间件&#xff0c;负责接收、存储和分发消息。具体来说&#xff0c;Broker接收来自生产者的消息&#xff0c;并将其持久化…

(十二)C语言的结构体

一.结构体 数组&#xff1a;允许定义可存储相同类型数据项的变量&#xff0c; 结构&#xff1a;另一种用户自定义的可用的数据类型&#xff0c;它允许您存储不同类型的数据项。 特点&#xff1a;结构体中的数据成员可以是基本数据类型&#xff08;如 int、float、char 等&…

Android 系统版本与SDK API对应关系-2024.5

官网地址&#xff1a;https://developer.android.google.cn/tools/releases/platforms?hlth

Vue 监控变化watch

1、watch 监控某个定义的属性的值,如果想要深层次的监听则需要定义deep:true 2、监控多层次单个元素使用"b.aa" 3、监控多层次所有的值定义deep:true ******data:{a:true,b:{aa:1,bb:2 }}*****catch:{a:{handler(newavlue,oldvalue){}},//监控b里面的aab.aa:{h…

经典分类网络LeNet5和VGG16项目:实现CIFAR10分类

CIFAR10分类 v1&#xff1a;LeNet5&#xff1a;2cnn3fc 可视化结果 精确率 损失 最佳 v2&#xff1a;LeNet5&#xff1a;3cnn2fc 可视化结果 精确率 损失 最佳 v3&#xff1a;LeNet5&#xff1a;2cnnbnres3fc 可视化结果 精确率 损失 最佳 v4&#xff1a;VG…

Sarcasm detection论文解析 |基于语义知识和辅助信息增强讽刺检测方法

论文地址 论文地址&#xff1a;https://www.sciencedirect.com/science/article/abs/pii/S0306457322000139?via%3Dihub 论文首页 笔记框架 基于语义知识和辅助信息增强讽刺检测方法 &#x1f4c5;出版年份:2022 &#x1f4d6;出版期刊:Information Processing & Managem…

webpack进阶 -- 自定义Plugin,Loader封装打包优化

介绍 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。在 Webpack 处理应用程序时&#xff0c;它会在内部构建一个依赖图(dependency graph)&#xff0c;这个依赖图对应映射到项目所需的每个模块&#xff0c;并生成一个或多个 bundle。在这个过程中…

Docker-compsoe部署prysm-beacon-chain + geth服务(geth版本v1.14.0)

1、创建目录结构 ~ # mkdir -p /data/docker-compose/eth ~ # cd /data/docker-compose/eth /data/docker-compose/eth# mkdir beacondata eth ethdata prysm2、编写prysm-beacon-chain Dockerfile和启动脚本文件 /data/docker-compose/eth# vim Dockerfile /data/docker-…

Git的系统级设置

一、如何查看当前系统登录的GIt用户信息 1.看全局Git配置文件 cat ~/.gitconfig 2.查看系统级Git配置文件 cat /etc/gitconfig 3.使用Git命令查看配置的用户名和电子邮件地址 git config --global user.name git config --global user.email 4.如果你想查看所有Git配置&…

(delphi11最新学习资料) Object Pascal 学习笔记---第11章第2节 ( 多个接口与方法别名)

11.2.3 多个接口与方法别名 ​ 接口的另一个非常重要的特点是一个类可以实现多个接口。下面的 TAthlete 类就演示了这一点&#xff0c;该类同时实现了 IWalker 和 IJumper 接口&#xff1a; TAthlete class(TInterfacedObject, IWalker, IJumper) privateFJumpImpl: TJumpe…