Flask 集成SQLAlchemy

在这一篇中,我们将学习如何在 Flask 中集成数据库,并使用 ORM(对象关系映射)来进行数据库操作。数据库是许多 Web 应用的核心组成部分,通过使用 Flask-SQLAlchemy 这个强大的工具,我们可以轻松地与数据库进行交互。

1. Flask-SQLAlchemy简介

Flask-SQLAlchemy 是 Flask 扩展的一部分,它简化了在 Flask 应用中使用 SQLAlchemy 进行数据库操作的过程。SQLAlchemy 是一个功能强大且灵活的 Python ORM 工具,它允许我们使用 Python 对象表示数据库中的表和记录。

安装 Flask-SQLAlchemy:

pip install Flask-SQLAlchemy

2. 定义模型

在 Flask-SQLAlchemy 中,模型是通过定义 Python 类来完成的。每个类都将成为数据库中的一张表。在 models.py 中,添加一个用户模型:

from flask_sqlalchemy import SQLAlchemy
import pymysqlpymysql.install_as_MySQLdb()
db = SQLAlchemy()class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(20), nullable=False)age = db.Column(db.Integer, nullable=False, index=True)email = db.Column(db.String(120), nullable=False)def __repr__(self):return f"User('{self.username}', '{self.age}', '{self.email}')"user_index = db.Index('user_index', User.username, User.email, unique=True)

注意:
由于连接的是mysql数据库,需要依赖MySQLdb,正常来说是要按照mysqlclient,但是按照这个依赖会报错:ERROR:pip.subprocessor:Getting requirements to build wheel exited with 1
所以改为安装pymysql来代替,但是需要加入这两行代码:

import pymysql
pymysql.install_as_MySQLdb()

3. 初始化Flask-SQLAlchemy

在 Flask 应用中,首先需要进行初始化。在 __init__.py 文件中,添加以下代码:

from flask import Flask
from .config import Config
from flask_migrate import Migratedef create_app(config_class=Config):app = Flask(__name__)app.config.from_object(config_class)# 注册蓝图、扩展等其他应用组件from app.index import index_blueprintfrom app.auth import auth_blueprintapp.register_blueprint(index_blueprint)app.register_blueprint(auth_blueprint)from .models import dbdb.init_app(app)migrate = Migrate(app, db)return app

4. 创建数据库表

当 Flask-SQLAlchemy 中的模型发生新增或者更新时,可以通过 Flask-Migrate 进行数据库迁移。数据库迁移是一种将数据库模式更新到最新版本的过程,它允许在不丢失数据的情况下进行数据库模型的修改。

安装 Flask-Migrate

pip install Flask-Migrate

使用 Flask-Migrate

# 初始化迁移环境,这会在应用目录中创建一个名为 `migrations` 的文件夹,用于存储迁移脚本
flask db init# 模型发生更改时,运行以下命令来创建一个新的迁移脚本
flask db migrate -m "Your migration message"# 运行以下命令将迁移应用到数据库
flask db upgrade

5. 数据库操作

from ..models import User, db
from sqlalchemy import or_, text# 添加一条新用户记录
new_user = User(username='john_doe', email='john@example.com', age=18)
db.session.add(new_user)
db.session.commit()# 查询所有用户
all_users = User.query.all()
for user in all_users:print(user)# 通过用户名查询单个用户
user = User.query.filter_by(username='john_doe').first()
print(user)# or操作
users = User.query.filter(or_(User.username.like('J%'), User.email.like('%@example.com%'))).all()
for user in users:print(user)# like操作
users = User.query.filter(User.username.like('J%')).all()
for user in users:print(user)# 排序
users = User.query.order_by(User.username.desc()).all()
for user in users:print(user)# count、sum
count = db.session.query(User).count()
print(count)ages = db.session.query(db.func.sum(User.age)).scalar()
print(ages)# 更新用户的邮箱地址
user = User.query.filter_by(username='john_doe').first()
user.email = 'new_email@example.com'
db.session.commit()user = User.query.filter_by(username='john_doe').first()
print(user)# 删除用户
user = User.query.filter_by(username='john_doe').first()
db.session.delete(user)
db.session.commit()# 直接执行sql
result = db.session.execute(text('select * from user'))
print(len(result.fetchall()))

8. 总结

本文介绍了如何在 Flask 中集成数据库,并使用 Flask-SQLAlchemy 进行简单的 ORM 操作。在实际项目中,可以通过定义更多的模型和进行复杂的查询操作来满足需求。数据库是 Web 开发中不可或缺的一部分,Flask 和 SQLAlchemy 让我们能够以更 Pythonic 的方式进行数据库操作,提高了开发效率。

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

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

相关文章

R语言【rgbif】——最全最详细的函数解读(name_suggest)

name_suggest最全最详细的参数解读 1. name_suggest的基本情况2. name_suggest的参数3. name_suggest的示例与理解3.1 参数 【q】3.2 参数【rank】3.3 参数【limit】3.4 参数【fields】3.5 参数【datasetKey】3.6 参数【curlopts】 1. name_suggest的基本情况 name_suggest是用…

堆能高效解决的经典问题

关卡名 堆能高效解决的经典问题 我会了✔️ 内容 1.掌握数组中寻找第K的元素 ✔️ 2.理解堆排序的原理 ✔️ 3.合并K个排序链表 ✔️ 1 在数组中找第K大的元素 LeetCode215 给定整数数组nums和整数k,请返回数组中第k个最大的元素。 请注意,你需要…

力扣面试经典150题——Unix简化路径

https://leetcode.cn/problems/simplify-path/description/?envTypestudy-plan-v2&envIdtop-interview-150 思路:将串以/分割,判断字符串是…/./其他,进行入栈和出栈,最后留下的就是结果,拼装一下就好了。 三个…

shell echo 不换行 覆盖当前行

echo -n 不换行输出 法1. echo -n "123" echo "456" 结果为: 123456 法2 echo -e "123\c" echo "456" 结果为: 123456 不换行,覆盖当前行 注: -n 不换行 \r 光标移到行首 如 echo -…

海上液化天然气 LNG 终端 ,数字孪生监控系统

液化天然气 (Liquefied Natural Gas,简称 LNG) 在能源转型过程中被广泛认可为相对较清洁的能源选择。 相对于传统的煤炭和石油燃料,LNG 的燃烧过程产生的二氧化碳 (CO2) 排放较低。LNG 的燃烧释放的二氧化碳排放较少,因此对应对气候变化和减…

Linux服务器配置指南:网络、用户管理、共享服务及DNS配置详解

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 1.Linux操作系统网络配置&#xff…

【Math】高斯分布的乘积 Product of Gaussian Distribution【附带Python实现】

【Math】高斯分布的乘积 Product of Gaussian Distribution【附带Python实现】 文章目录 【Math】高斯分布的乘积 Product of Gaussian Distribution【附带Python实现】1.推导2. CodeReference 结果先放在前面 1.推导 在学习PEARL算法的时候,encoder的设计涉及到了…

Helm 私有仓库搭建

原理 构建一个本地的Helm chart仓库 任何的HTTP Server都可以作为chart仓库 开源实现参考文档 ## Chartmuseum https://www.jianshu.com/p/772754c68ea4##chart私有仓库创建 httpd私有仓库 需要手工scp package传包上去。 docker run -d -p 8081:80 -v /var/www:/usr/loca…

MySQL limit导致索引选择(选择的并不是最佳索引)案例分析

mysql limit导致索引选择(选择的并不是最佳索引)案例分析: 这种情况可能是mysql优化器内部bug造成: bug 触发条件如下: 1.优化器先选择了 where 条件中字段的索引,该索引过滤性较好; 2.SQL 中必须有 orde…

k8s中Service负载均衡和Service类型介绍

目录 一.service介绍 二.service参数详解 三.定义service的两种方式 1.命令行expose 2.yaml文件 四.service负载均衡配置 1.kube-proxy代理模式 (1)设置ipvs (2)负载均衡调度策略 2.会话保持 3.案例演示 五.四种Servi…

[Python]字典的应用:赋值表达式转化为字典

文件中有很多行,每行中一个等号,等号左边是键右边是值,如何把这些键值对获取到 def read_key_value_pairs(file_path):key_value_pairs {}i 0# 注意解码格式与编码格式相统一with open(file_path, r, encodingutf-8) as file:for line in…

docker镜像与容器的基本操作,容器打包以及镜像迁移

docker镜像拉取---docker pull docker pull image_name[:tag] 这是直接拉取官方镜像 image_name: 镜像的名称,例如 ubuntu, nginx, mysql 等。tag: 镜像的标签,表示版本或者特定的标识。如果未指定标签,默认为 latest。 例如,…

C# OpenCvSharp DNN 深度神经网络下的风格迁移模型

目录 介绍 效果 项目 代码 下载 C# OpenCvSharp DNN 深度神经网络下的风格迁移模型 介绍 深度神经网络下的风格迁移模型,适用于OpenCv、EmguCv。 斯坦福大学李飞飞团队的风格迁移模型是一种基于深度学习的图像处理技术,可以将一张图像的风格转移…

ArcGIS模型构建器--制作工具篇

基础知识点: 变量替换 1、要素替换 %name%,name为替换的名字 2、工作空间替换(拷贝给其他人仍可使用) 新建一个工作空间变量workspace %workspace%\%name% 中间数据处理 在模型构建器界面运行模型,会生成中间数据。 中间数据处理方法…

高性能网络编程 - 白话TCP 三次握手过程

文章目录 概述TCP协议头的格式TCP Finite State Machine (FSM) 状态机三次握手如何在 Linux 系统中查看 TCP 状态 概述 每一个抽象层建立在低一层提供的服务上,并且为高一层提供服务。 我们需要知道 TCP在网络OSI的七层模型中的第四层——Transport层 -----------…

mysql源码linux环境部署

文章目录 一、mysql下载地址二、安装步骤1.cd /usr/local/ #切换到此目录下2.上传mysql安装包到该目录下3.解压并且移动文件到 /usr/local/mysql目录下 三、创建用户组,分配权限四、修改文件总结 提示:以下是本篇文章正文内容,下面案例可供参…

对比传统跨网文件交换方式,文件摆渡系统拥有4大优势!

网络隔离已是较为常见的网络安全保护措施,越来越多公司进行隔离网建设来隔绝外部网络有害攻击,但隔离后不少数据和文件仍需进行流转,就产生了跨网数据交换需求,在过去,企业使用较多的传统跨网文件交换方式有移动介质、…

扩散模型实战(十四):扩散模型生成音频

推荐阅读列表: 扩散模型实战(一):基本原理介绍 扩散模型实战(二):扩散模型的发展 扩散模型实战(三):扩散模型的应用 扩散模型实战(四&#xff…

基于MySQL+IDEA+Mybaits开发的OA办公系统

基于MySQLIDEAMybaits开发的OA办公系统 项目介绍💁🏻 本项目是一个基于MySQL、Tomcat和MyBatis开发的OA管理系统。该系统的主要功能包括系统登录主页面、用户管理、部门管理、职位管理及查询、公告管理及查询、签到处理以及签到图表统计等。 在数据库方面…

ROS小练习——话题订阅

目录 一、话题与消息获取 二、代码编写 1、C 2、python 三、编译运行 一、话题与消息获取 rostopic list rostopic type /turtle1/pose rosmsg info turtlesim/Pose 二、代码编写 1、C //包含头文件 #include "ros/ros.h" #include "turtlesim/Pose…