首页 > 其他分享 >数量限制、排序与事务操作

数量限制、排序与事务操作

时间:2024-07-13 18:18:53浏览次数:16  
标签:事务 限制 students db stu session Student 排序 id

查询限制

在关于 SQLAlchemy 教程的前文中,你应该知道如何使用 selectquery 方法来查询数据。接下来我们尝试使用 limit 方法来限制返回的结果数量。

import db
from model import Student


# 使用 select 方法限制结果数量
q = db.select(Student).where(Student.id.in_([1, 2, 3])).limit(2)
students = db.session.execute(q).scalars()
for stu in students:
    print(stu.to_dict())

# 或者使用 query 方法限制结果数量
students = db.session.query(Student).filter(Student.id.in_([1, 2, 3])).limit(2).all()
for stu in students:
    print(stu.to_dict())

在 SQL 语句中,看起来就应该是这样的:

SELECT * FROM tb_student WHERE id IN (1, 2, 3) LIMIT 2;

使用 offset 方法

offset 方法用于跳过查询结果中的前 N 条记录。它在 SQL 中对应的是 OFFSET 子句。通常,offsetlimit 一起使用,用于分页查询。以下代码演示了跳过 id 为 1 的学生,然后查询出来学生ID为 23 的学生。

import db
from model import Student


# 使用 select 方法结合 offset
# 虽然是 limit(x).offset(y) 但是我们应该清楚:先跳过 y 条,取出 y 后面的 x 条
q = db.select(Student).where(Student.id.in_([1, 2, 3])).limit(2).offset(1)
students = db.session.execute(q).scalars()
for stu in students:
    print(stu.to_dict())
    
# 使用 query 方法结合 offset
students = db.session.query(Student).filter(Student.id.in_([1, 2, 3])).limit(2).offset(1).all()
for stu in students:
    print(stu.to_dict())

换作 SQL 语句即是:

SELECT * FROM tb_student WHERE id IN (1, 2, 3) LIMIT 2 OFFSET 1;

结果的排序

SQLAlchemy 提供了 order_by 方法来对查询结果进行排序。你可以按升序或降序排序。

import db
from model import Student


# 按 class_ 字段升序排序
q = db.select(Student).order_by(Student.class_.asc())
students = db.session.execute(q).scalars()
for stu in students:
    print(stu.to_dict())
    
# 按 id 字段降序排序
q = db.select(Student).order_by(Student.id.desc())
students = db.session.execute(q).scalars()
for stu in students:
    print(stu.to_dict())

你可以看到,所谓降序、升序是通过字段的两个属性去决定:

模型名.字段名.desc()	---	按照字段的值`降`序排序
模型名.字段名.asc()	---	按照字段的值`升`序排序

如果需要多重字段排序,为 order_by 方法传入数量合适的参数即可。比如:

db.select(Student).order_by(Student.class_.desc(), Student.id.asc())
# 当班级相同时,安装学生的编号大小升序

事务操作

事务操作允许你将多个数据库操作打包在一起,要么全部成功,要么全部失败。使用 begincommitrollback 方法可以实现事务操作。

import db
from model import Student


try:
    # 开始事务
    db.session.begin()

    # 这里可以执行多个数据库操作
    student = Student(
        id=2,
        name='李小红',
        age=19,
        class_=4,
        description='学习很努力',
    )
    db.session.add(student)

    # 提交事务
    db.session.commit()
except Exception as e:
    print(e)
    # 回滚事务
    db.session.rollback()

上面的代码中,我们开始了一个事务,添加了一条新的 Student 记录,如果操作成功则提交事务,如果发生异常则回滚事务并打印异常。

标签:事务,限制,students,db,stu,session,Student,排序,id
From: https://www.cnblogs.com/gupingan/p/18300463

相关文章

  • 排序——归并排序
    前面的文章中我们详细介绍了排序的概念,插入排序,交换排序与选择排序,大家可以通过下面的链接再去学习:​​​​​​排序的概念及插入排序交换排序选择排序这篇文章就详细介绍一下另一种排序算法:归并排序。一,基本概念归并:将两个或两个以上的有序表组合成一个新有序表2-路归......
  • 排序算法——选择排序法
    选择排序算法概述选择排序(SelectionSort)是一种简单直观的排序算法。它的基本思想是:在要排序的一组数中,选出最小(或最大)的一个数与第一个位置的数交换;然后在剩下的数当中再找最小(或最大)的与第二个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较......
  • mysql获取按日期排序获取最新的记录
    今天让一个数据查询难了。主要是对groupby理解的不够深入。才出现这样的情况这种需求,我想很多人都遇到过。下面是我模拟我的内容表我现在需要取出每个分类中最新的内容select*fromtestgroupbycategory_idorderby`date`结果如下:明显。这不是我想要的数据,原因是msyql......
  • LeetCode 2974. 最小数字游戏(排序)
    题目:2974.最小数字游戏思路:排序后,两个两个取出来进行操作即可classSolution{public:vector<int>numberGame(vector<int>&nums){sort(nums.begin(),nums.end());vector<int>v;for(inti=1;i<nums.size();i+=2){v.pu......
  • JDK 8 之后可以使用更加简单的方法 Stream 流来实现排序功能
    //创建并初始化ListList<Person>list=newArrayList<Person>(){{add(newPerson(1,30,"张三"));add(newPerson(2,20,"李四"));add(newPerson(3,40,"王五"));}};......
  • 希尔排序详解
    文章目录希尔排序原理排序演示1排序演示2复杂度分析时间复杂度空间复杂度稳定性希尔排序原理希尔排序(也称为缩小增量排序)采用的是分治的思想,设定一定的间隔,按照这个间隔将集合分成若干个子集合,然后对子集合进行排序;完成后减少这个间隔,再进行排序;逐渐减小这个间隔,直......
  • Java中的排序算法详解
    Java中的排序算法详解大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!1.排序算法概述排序算法是计算机科学中的基础问题,它将一组元素按照特定的顺序重新排列。在实际开发中,选择合适的排序算法可以显著提高程序的性能。2.冒泡排序(BubbleSort)冒泡排序......
  • 经典再现,回顾常见排序算法之冒泡排序,附Java源码及优化改进实现
    回顾一下排序算法,老酒装新瓶,给自己的技能点做个回放。排序(Sorting)是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个有序的序列,也可以理解为高矮个站队。衡量排序算法的两个指标,时间复杂度和稳定性。举个例子,如果我们的数据......
  • 【Oracle】SQL 将一组已经排序的数据进行分组,按照每组50行进行分组
    【Oracle】SQL将一组已经排序的数据进行分组,按照每组50行进行分组简单来说,使用ceil函数SELECTyour_column,--ROW_NUMBER()OVER(ORDERBYyour_column)为排序的开窗函数,用那种都可以CEIL(ROW_NUMBER()OVER(ORDERBYyour_column)/51)ASgroup_numberFR......
  • PCDN技术如何应对网络带宽限制?(贰)
    PCDN技术应对网络带宽限制的操作主要包括以下几个方面:利用P2P技术:PCDN是以P2P技术为基础,通过挖掘利用边缘网络海量碎片化闲置资源来构建内容分发网络。这意味着,当用户从服务器下载资源时,其上行带宽也会被利用起来,贡献给其他用户,从而形成一个分布式的缓存网络。这种方式能有效......