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

3.flask-sqlalchemy ORM库

介绍

Flask-SQLAlchemy是一个用于Flask的扩展,它提供了一个便捷的方式来处理数据库操作。Flask-SQLAlchemy基于SQLAlchemy,一个功能强大的Python SQL工具包和对象关系映射(ORM)系统
官网文档:http://www.pythondoc.com/flask-sqlalchemy/

一.安装

pip install flask-sqlalchemy

二.flask-sqlalchemy基本使用

from flask import Flask  
from flask_sqlalchemy import SQLAlchemy  app = Flask(__name__)  
app.config['SQLALCHEMY_DATABASE_URI'] = 'your_database_uri'  # 替换为你的数据库URI  
db = SQLAlchemy(app)
from flask_sqlalchemy import SQLAlchemy  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)  password = db.Column(db.String(120), nullable=False)
if __name__ == '__main__':  db.create_all()users = db.session.query(User).filter_by(username='John').all()  for user in users:  print(user.email)# 创建新用户对象  new_user = User(username='John', email='john@example.com', password='password')  db.session.add(new_user)  db.session.commit()  # 提交更改到数据库  # 查询用户对象  john = User.query.filter_by(username='John').first()  print(john.email)

三.flask-sqlalchemy常用方法

db.create_all():创建数据库表。db.session.query(Model):创建查询对象,用于执行数据库查询。db.session.add(instance):将实例添加到数据库会话中。db.session.commit():提交更改到数据库。db.session.delete(instance):删除实例并提交更改。db.session.merge(instance):将实例合并到数据库会话中并提交更改。db.session.flush():执行数据库的flush操作,将所有的操作写入数据库。db.session.expunge(instance):从会话中驱逐实例。db.session.refresh(instance):刷新实例的属性,从数据库中获取最新数据。db.session.get_by(key, value):根据给定的键和值获取实例。db.session.filter_by(key=value):根据给定的键和值过滤会话中的实例。db.session.first():返回查询结果中的第一个实例。db.session.first_or_404():返回查询结果中的第一个实例,如果未找到则返回404错误。db.session.all():返回查询结果中的所有实例。db.session.count():返回查询结果中的实例数量。db.session.delete_all():删除会话中的所有实例并提交更改。db.session.flush_all():执行数据库的flush操作,将所有的操作写入数据库,并清空会话。db.relationship(RelatedModel):创建关联关系,将两个模型关联起来。db.backref(name, uselist=True):为关联关系创建一个反向引用,可以通过反向引用访问关联的实例。db.column_property(column):创建一个列属性,用于获取或计算特定列的值。db.SynonymProperty(name, column=None):创建一个同义词属性,用于获取或设置特定列的值。db.ext:提供扩展功能,例如关联数据缓存、继承策略等。

四.Flask-SQLAlchemy中的db.Column支持以下类型

Integer:普通整数,一般是32位。SmallInteger:取值范围小的整数,一般是16位。BigInteger:不限制精度的整数,可以是int或long类型。Float:浮点数。String:变长字符串。Text:大文本字段。Boolean:布尔类型。DateTime:日期和时间类型。Date:日期类型。Time:时间类型。JSON:JSON格式数据类型。ARRAY:数组类型。PickleType:Pickle类型,用于存储Python对象结构。LargeBinary:大二进制字段。Enum:枚举类型。ARRAY:数组类型。JSON:JSON格式数据类型。TypeDecorator:用于自定义数据类型。
此外,db.Column还支持SQLAlchemy核心的任何数据类型,你可以根据需要自定义数据类型

五.关系模型

5.1一对多关系(OneToMany)

一对多关系是指一个模型与另一个模型之间存在多对一的关系。在 Flask-SQLAlchemy 中,你可以使用 relationship() 方法来定义一对多关系。下面是一个示例

from flask_sqlalchemy import SQLAlchemy  db = SQLAlchemy()  class User(db.Model):  id = db.Column(db.Integer, primary_key=True)  name = db.Column(db.String(50))  email = db.Column(db.String(50))  posts = db.relationship('Post', backref='user', lazy='dynamic')  class Post(db.Model):  id = db.Column(db.Integer, primary_key=True)  title = db.Column(db.String(100))  content = db.Column(db.Text)

在上面的示例中,User 和 Post 之间存在一对多关系。每个用户可以有多个帖子,每个帖子都与一个用户关联。

5.2多对多关系(ManyToMany)

多对多关系是指多个模型之间存在多对多的关系。在 Flask-SQLAlchemy 中,你可以使用 secondary 参数来定义多对多关系。下面是一个示例

from flask_sqlalchemy import SQLAlchemy  db = SQLAlchemy()  class User(db.Model):  id = db.Column(db.Integer, primary_key=True)  name = db.Column(db.String(50))  email = db.Column(db.String(50))  class Group(db.Model):  id = db.Column(db.Integer, primary_key=True)  name = db.Column(db.String(50))  user_group = db.Table('user_group',  db.Column('user_id', db.Integer, db.ForeignKey('user.id')),  db.Column('group_id', db.Integer, db.ForeignKey('group.id'))  
)  User.groups = db.relationship('Group', secondary=user_group, backref='users', lazy='dynamic')

在上面的示例中,User 和 Group 之间存在多对多关系。每个用户可以属于多个组,每个组可以包含多个用户。通过 secondary 参数,我们定义了一个名为 user_group 的中间表来存储用户和组之间的关联关系

5.3多对一关系(ManyToOne)

多对一关系是指多个模型与另一个模型之间存在一对多的关系。在 Flask-SQLAlchemy 中,你可以使用 relationship() 方法来定义多对一关系。下面是一个示例

from flask_sqlalchemy import SQLAlchemy  db = SQLAlchemy()  class User(db.Model):  id = db.Column(db.Integer, primary_key=True)  name = db.Column(db.String(50))  email = db.Column(db.String(50))  role_id = db.Column(db.Integer, db.ForeignKey('role.id'))  class Role(db.Model):  id = db.Column(db.Integer, primary_key=True)  name = db.Column(db.String(50))  users = db.relationship('User', backref='role', lazy='dynamic')

在上面的示例中,User 和 Role 之间存在多对一关系。多个用户可以拥有一个角色,每个角色可以与多个用户关联。通过外键约束 role_id,我们将用户与角色关联起来

常用的查询和过滤方法

filter()使用指定的规则过滤记录,返回新产生的查询对象
filter_by()使用指定规则过滤记录(以关键字表达式的形式),返回新产生的查询对象
order_by()根据指定条件对记录进行排序,返回新产生的查询对象
group_by()根据指定条件对记录进行分组,返回新产生的查询对象

问题一:外键约束不能直接删除

sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1451, ‘Cannot delete or update a parent row: a foreign key constraint fails (pearadminflask.pt_renewal, CONSTRAINT pt_renewal_ibfk_1 FOREIGN KEY (course_id) REFERENCES pt_course (id))’)
[SQL: DELETE FROM pt_course WHERE pt_course.id = %(id_1)s]
[parameters: {‘id_1’: ‘110’}]

相关文章:

3.flask-sqlalchemy ORM库

介绍 Flask-SQLAlchemy是一个用于Flask的扩展,它提供了一个便捷的方式来处理数据库操作。Flask-SQLAlchemy基于SQLAlchemy,一个功能强大的Python SQL工具包和对象关系映射(ORM)系统 官网文档:http://www.pythondoc.com/flask-sql…...

mac 安装 homebrew

摘要: 本文主要是下载安装包安装homebrew,然后配置环境变量Path。检验是否安装成功。 homebrew地址:macOS(或 Linux)缺失的软件包的管理器 — Homebrew 在终端命令下载安装: /bin/bash -c "$(curl…...

R语言应用interactionR包进行亚组相加交互作用分析

在统计分析中交互作用是指某因素的作用随其他因素水平变化而变化,两因素共同作用不等于两因素单独作用之和(相加交互作用)或之积(相乘交互作用)。相互作用的评估是尺度相关的:乘法或加法。乘法尺度上的相互作用意味着两次暴露的综合效应大于(…...

mysql 数据库面试题整理

Mysql 中 MyISAM 和 InnoDB 的区别 1、InnoDB 支持事务MyISAM 不支持 2、InnoDB 支持外键MyISAM 不支持 3、InnoDB 是聚集索引,MyISAM 是非聚集索引 4、InnoDB 不保存表的具体行数 5、InnoDB 最小的锁粒度是行锁,MyISAM是表锁 mysql中有就更新&#xf…...

LeetCode-435-无重叠区间

题目链接&#xff1a; 力扣435 -无重叠区间 解题思路&#xff1a;和之前的合并区间、汇总区间都比较相似&#xff0c; 先对二维数组排序&#xff0c;按照左边界升序&#xff1b;当 当前区间的左区间 < 前一个区间的右区间&#xff0c;说明有重叠&#xff0c;res1,还要更新当…...

记录深度学习常用指令(一)

一、创建Conda虚拟Python环境 conda create -n [仓库名字] python[版本]二、激活环境 conda activate [仓库名字]三、安装PyTorch PyTorch官方 GPU&#xff1a; conda install pytorch1.11.0 torchvision0.12.0 torchaudio0.11.0 cudatoolkit11.3 -c pytorchCPU&#xff1…...

Shell脚本练习——系统应用相关

显示系统信息 [rootwenzi data]#cat systemInfo.sh #/bin/bash RED"\E[1;31m" GREEN"\E[1;32m" END"\E[0m" echo -e "$GREEN----------------------Host systeminfo--------------------$END" echo -e "HOSTNAME: $REDho…...

同创永益入选首批“金融数字韧性与混沌工程实践试点机构”

8月16日下午&#xff0c;由北京国家金融科技认证中心、北京国家金融标准化研究院联合主办的“传递信任 服务发展”金融科技标准认证生态大会在太原成功举办。中国金融电子化集团有限公司党委书记、董事长周逢民&#xff0c;中国科学院院士冯登国&#xff0c;中国工商银行首席技…...

Hive 表注释乱码解决

文章目录 出现原因MySQL 字符集修改调整元数据库字符集测试 出现原因 一般 Hive 的元数据信息都存储在 MySQL 中&#xff0c;但 MySQL 数据库中的 character_set_server 和 character_set_database 参数&#xff0c;默认都为 latin1 字符集&#xff0c;这两个参数决定了服务器…...

【搭建私人图床】使用LightPicture开源搭建图片管理系统并远程访问

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进&#xff0c;功能也越来越多&#xff0c;而手机…...

Ubuntu入门04——目录与文件

目录 1.显示当前工作目录 2.更改目录 3.创建工作目录 4.删除工作目录 5.移动文件或者文件夹 6.文件夹and文件查看命令 7. 回到根目录&#xff0c;回到上一级 8.删除工作目录 9.查看目录和文件 10.以树状图列出目录内容 11.文件查找 12.在数据库中查找文件或目录 1…...

深度学习中有哪些超参数,都有什么作用

深度学习中有许多超参数需要设置&#xff0c;它们会对模型的性能和训练过程产生重要影响。以下是一些常见的超参数及其作用&#xff1a; 学习率&#xff08;Learning Rate&#xff09;&#xff1a;控制参数更新的步长。较小的学习率可以使模型收敛更稳定&#xff0c;但可能需要…...

centOS下载与安装

1 下载centOS镜像 The CentOS Project 选择阿里云的镜像 2 下载虚拟机 Vmware workstation VMware - Delivering a Digital Foundation For Businesses 1 下载安装 centOs是一个操作系统&#xff0c;操作硬件的。所以需要有机器&#xff0c;可以使用虚拟机。 2 创建新的虚…...

uniapp中mixins的使用

mixins 是一个 js 对象&#xff0c;它可以包含我们组件中JS部分的任意功能选项&#xff0c;如&#xff1a;data、components、methods、created、computed 等等。我们只要将公用的功能以对象的方式传入 mixins 选项中&#xff0c;当组件使用 mixins 对象时所有 mixins 对象都将…...

【JAVA基础——JAVA虚拟机JVM】

JVM 文章目录 JVM一.JVM结构1.1.JVM包含两个子系统和两个组件1.2.运行时数据区1.2.1.简介1.2.2.程序计数器1.2.3.虚拟机栈1.2.4.堆1.2.5.本地方法栈1.2.6.方法区(永久代实现)java8-1.2.7.元空间(Metaspace)1.2.8.JVM字节码执行引擎1.2.9.直接内存(Direct Memory)1.2.10.垃圾收集…...

RTSP/Onvif视频服务器EasyNVR安防视频平台服务器频繁重启的问题解决方案

EasyNVR平台优秀的视频能力在于通过RTSP/ONVIF协议&#xff0c;将前端接入设备的音视频资源进行采集&#xff0c;并转码成适合全平台、全终端分发的视频流格式&#xff0c;包括RTSP、RTMP、FLV、HLS、WebRTC等格式。平台可拓展性强、部署轻快&#xff0c;在安防监控领域有着广泛…...

SpringBoot初级开发--服务请求(GET/POST)所有参数的记录管理(8)

服务端在定位错误的时候&#xff0c;有时候要还原现场&#xff0c;这就要把当时的所有入参参数都能记录下来&#xff0c;GET还好说&#xff0c;基本NGINX都会记录。但是POST的请求参数基本不会被记录&#xff0c;这就需要我们通过一些小技巧来记录这些参数&#xff0c;放入日志…...

快速掌握STM32工程创建

STM32 工程创建-- 使用Keil uVision5 软件 晓理紫 1 准备库函数库 STM32F10x_StdPeriph_Lib_V3.5.0 VX 搜索“晓丽紫”关注回复STM32F10x即可下载 2、创建一个目录用来存放工程 STM32Study STM32Study/study1 存放本次工程目录 3、打开Keil uVision5 创建工程 4、选择型号(根据…...

如何利用开源工具搭建AI大模型底座

开源社区是技术发展的一个重要部分&#xff0c;对于AI大模型来说&#xff0c;也是如此。 我们在这篇文章中来尝试通过开源工具来构建AI大模型的底座&#xff0c;涉及到的技术包括&#xff1a; LangchainOpenAIFlowiseLocalAILlama 使用Langchain构建第一个对话应用 如果你使…...

算法笔记:二叉树

1 基本二叉树 二叉树是一种树形数据结构&#xff0c;其中每个节点最多有两个子节点&#xff0c;通常称为“左子节点”和“右子节点”。 二叉树的根是唯一没有父节点的节点&#xff0c;而所有其他节点都有一个父节点和零个或两个子节点。 1.1 基础术语 节点&#xff08;Node&…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...