python SQLAlchemy ORM——从零开始学习03 如何针对数据库信息进行排序
03 如何进行排序
3-1准备工作:
因为要排序,所以需要随机多谢数据,model见后文。也需要random进行随机
from model import User, Engine
from sqlalchemy.orm import sessionmaker
import random
Session = sessionmaker(bind=Engine)
session = Session()
def add_random():
names = ['arthur', 'Abigail Williams', 'caster', 'Lilith']
ages = [14, 18, 20, 21, 23, 25, 28, 30, 31, 100]
for x in range(20):
user = User(name=random.choice(names), age=random.choice(ages)) # 创建随机user
session.add(user) # 这里每次添加,会存放到缓冲区,之后一并提交,虽然可以使用users存放再add_all,但是这增加了开销,不过可读性增加了
session.commit()
数据库可以看到【不一定相等,毕竟是随机,但数量是20就行】:

如果多次点击了导致多于20个怎么办,我确实是点多了一次,用我自己写的这个接口就能删到只剩20了,或者你自己修改都可以
def remove_at_lest_20():
users = session.query(User).filter(User.id > 20).all()
for user_one in users:
session.delete(user_one)
session.commit()
3-2 排序
其实只需要了解order_by()这个接口就好,先看看官方对这个接口的eg:
q = session.query(Entity).order_by(Entity.id, Entity.name)
其实基本上同理,他可以接收多个参数
def order_sort():
Users = session.query(User).order_by(User.age, User.name).all()
# Users = session.query(User).order_by(User.age.desc(), User.name).all() #其中使用.desc可以进行倒序排序
for user in Users:
print(user)
顺序的结果是(部分):

倒叙的结果也是没问题的:

PS:注意,如果后面commit是没有效果的,因为需要显式修改数据库才能记录【如add、del、修改】这里使用排序是不会对源数据进行修改的。
3-3 code
model
from sqlalchemy import create_engine, Integer, String
from sqlalchemy.orm import DeclarativeBase, mapped_column,Mapped
from typing import Optional
url = "sqlite:///database_02.db" #记得修改一下自己的数据库
Engine = create_engine(url,echo=True)
class Base(DeclarativeBase): #通过类构造,这样子会有语法提示
pass
class User(Base): #构造自己的User表
__tablename__ = "User"
id:Mapped[int] = mapped_column(primary_key=True) #构造方法和之前不一样,但是效果是一样的,我这里偷学了,不用管,直接复制就好
name:Mapped[str] = mapped_column(nullable=True)
age:Mapped[Optional[int]]
def __repr__(self): #方便后续直接print的,有兴趣可以了解一下
return f"id:{self.id}, name:{self.name}, age:{self.age}"
Base.metadata.create_all(Engine)
lesson2
from model import User, Engine
from sqlalchemy.orm import sessionmaker
import random
Session = sessionmaker(bind=Engine)
session = Session()
def add_random():
names = ['arthur', 'Abigail Williams', 'caster', 'Lilith']
ages = [14, 18, 20, 21, 23, 25, 28, 30, 31, 100]
for x in range(20):
user = User(name=random.choice(names), age=random.choice(ages)) # 创建随机user
session.add(user) # 这里每次添加,会存放到缓冲区,之后一并提交,虽然可以使用users存放再add_all,但是这增加了开销,不过可读性增加了
session.commit()
def remove_at_lest_20():
users = session.query(User).filter(User.id > 20).all()
for user_one in users:
session.delete(user_one)
session.commit()
def order_sort():
# Users = session.query(User).order_by(User.age, User.name).all()
Users = session.query(User).order_by(User.age.desc(), User.name).all() #其中使用.desc可以进行倒序排序
for user in Users:
print(user)
if __name__ == '__main__':
order_sort()
# remove_at_lest_20()
python SQLAlchemy ORM——从零开始学习03 如何针对数据库信息进行排序的更多相关文章
- Python sqlalchemy orm 外键关联
创建外键关联 并通过relationship 互相调用 如图: 实现代码: import sqlalchemy # 调用链接数据库 from sqlalchemy import create_engi ...
- Python sqlalchemy orm 多对多外键关联
多对多外键关联 注:使用三张表进行对应关联 实现代码: # 创建3个表 配置外键关联 # 调用Column创建字段 加类型 from sqlalchemy import Table, Column, ...
- Python SQLAlchemy ORM示例
SQLAlchemy的是Python的SQL工具包和对象关系映射,给应用程序开发者提供SQL的强大功能和灵活性. 安装 pip install mysql-python pip install sql ...
- Python sqlalchemy orm 常用操作
增add # 创建表1 # 注:高级封装 import sqlalchemy # 调用链接数据库 from sqlalchemy import create_engine # 调用基类Base fro ...
- Python sqlalchemy orm 多外键关联
多外键关联 注:在两个表之间进行多外键链接 如图: 案例: # 创建两张表并添加外键主键 # 调用Column创建字段 加类型 from sqlalchemy import Integer, For ...
- python中orm框架学习
安装sqlalchemy pip3 install sqlalchemy 创建表结构: from sqlalchemy import Column,String,create_engine from ...
- [Python接口自动化]从零开始学习python自动化(1):环境搭建
第一步:安装python编译环境 安装python编译环境之前,必须保证已安装jdk哈,如果为安装,请参考https://jingyan.baidu.com/article/6dad5075d1dc4 ...
- Python SQLAlchemy --3
本文為 Python SQLAlchemy ORM 一系列教學文: 刪除 學會如何查詢之後,就能夠進行後續的刪除.更新等操作. 同樣地,以幾個範例做為學習的捷徑. 123456789 user_1 = ...
- Python SQLAlchemy --2
本文為 Python SQLAlchemy ORM 一系列教學文: 接下來會更深入地探討查詢的使用. 查詢的基本使用法為 session.query(Mapped Class),其後可加 .group ...
- Python SQLAlchemy --1
本文為 Python SQLAlchemy ORM 一系列教學文: SQLAlchemy 大概是目前 Python 最完整的資料庫操作的套件了,不過最令人垢病的是它的文件真的很難閱讀,如果不搭配個實例 ...
随机推荐
- 使用 FastGPT 工作流搭建 GitHub Issues 自动总结机器人
如今任何项目开发节奏都很快,及时掌握项目动态是很重要滴,GitHub Issues 一般都是开发者和用户反馈问题的主要渠道. 然而,随着 Issue 数量的增加,及时跟进每一个问题会变得越来越困难. ...
- 鸿蒙Navigation处理启动页跳转到首页问题
在使用Navigation时时,你是否遇到了这样一个问题,Navigation加载启动页为入口,在启动页replace到首页,使首页替换换启动页,结果发现不生效,启动页依然存在. 为什么根页面启动页不 ...
- 鸿蒙NEXT开发案例:转盘
[1]引言(完整代码在最后面) 在鸿蒙NEXT系统中,开发一个有趣且实用的转盘应用不仅可以提升用户体验,还能展示鸿蒙系统的强大功能.本文将详细介绍如何使用鸿蒙NEXT系统开发一个转盘应用,涵盖从组件定 ...
- jmeter如何产生批量数据?
在使用jmeter时,若需要产生批量数据,可以通过连接数据库--执行相关sql进行操作,例如添加20条数据 步骤: 1.添加jdbc 数据库配置信息 2.添加循环控制器(循环次数20) 3.循环控制器 ...
- AI那么厉害,那测试开发和自动化测试这些职位是不是就多余了?
在当今科技飞速发展的时代,AI大模型如ChatGPT等如同璀璨星辰般闪耀登场,它们的强大功能引发了各个领域的诸多思考.在软件测试领域,不少人心里直犯嘀咕:这AI大模型都这么厉害了,那测试开发和自动化测 ...
- golang类型转换模块之gconv
gf框架提供了非常强大的类型转换包gconv,可以实现将任何数据类型转换为指定的数据类型,对常用基本数据类型之间的无缝转换,同时也支持任意类型到struct对象的属性赋值.由于gconv模块内部大量使 ...
- golang之gRPC
相关链接: grpc: https://grpc.io/docs/languages/go/quickstart/ protobuf: https://protobuf.dev/programming ...
- MySQL8.0之特性
MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能.下面我们将简要介绍下 MySQL 8.0 中值得关注的 ...
- Cython二进制逆向系列(一) 初识Cython
Cython二进制逆向系列(一) 初识Cython 众所周知,Python类题目最难的一种就是使用Cython工具将py源码转换为二进制文件.此类题目相比于直接由Cpython编译而成的类字节码文 ...
- 【滑动窗口】codeforces 1290 A. Mind Control
题意 第一行输入一个正整数 \(T(1 \leq T \leq 1000)\),表示共有 \(T\) 组测试用例.对于每一组测试用例: 第一行输入三个正整数 \(n, m, k(1 \leq m \l ...