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 如何针对数据库信息进行排序的更多相关文章

  1. Python sqlalchemy orm 外键关联

    创建外键关联 并通过relationship 互相调用 如图: 实现代码: import sqlalchemy # 调用链接数据库 from sqlalchemy import create_engi ...

  2. Python sqlalchemy orm 多对多外键关联

    多对多外键关联 注:使用三张表进行对应关联 实现代码: # 创建3个表 配置外键关联 # 调用Column创建字段 加类型 from sqlalchemy import Table, Column, ...

  3. Python SQLAlchemy ORM示例

    SQLAlchemy的是Python的SQL工具包和对象关系映射,给应用程序开发者提供SQL的强大功能和灵活性. 安装 pip install mysql-python pip install sql ...

  4. Python sqlalchemy orm 常用操作

    增add # 创建表1 # 注:高级封装 import sqlalchemy # 调用链接数据库 from sqlalchemy import create_engine # 调用基类Base fro ...

  5. Python sqlalchemy orm 多外键关联

     多外键关联 注:在两个表之间进行多外键链接 如图: 案例: # 创建两张表并添加外键主键 # 调用Column创建字段 加类型 from sqlalchemy import Integer, For ...

  6. python中orm框架学习

    安装sqlalchemy pip3 install sqlalchemy 创建表结构: from sqlalchemy import Column,String,create_engine from ...

  7. [Python接口自动化]从零开始学习python自动化(1):环境搭建

    第一步:安装python编译环境 安装python编译环境之前,必须保证已安装jdk哈,如果为安装,请参考https://jingyan.baidu.com/article/6dad5075d1dc4 ...

  8. Python SQLAlchemy --3

    本文為 Python SQLAlchemy ORM 一系列教學文: 刪除 學會如何查詢之後,就能夠進行後續的刪除.更新等操作. 同樣地,以幾個範例做為學習的捷徑. 123456789 user_1 = ...

  9. Python SQLAlchemy --2

    本文為 Python SQLAlchemy ORM 一系列教學文: 接下來會更深入地探討查詢的使用. 查詢的基本使用法為 session.query(Mapped Class),其後可加 .group ...

  10. Python SQLAlchemy --1

    本文為 Python SQLAlchemy ORM 一系列教學文: SQLAlchemy 大概是目前 Python 最完整的資料庫操作的套件了,不過最令人垢病的是它的文件真的很難閱讀,如果不搭配個實例 ...

随机推荐

  1. WinDbg符号配置

    符号文件介绍 它包含了应用程序二进制文件(比如:EXE.DLL等)调试信息,专门用来作调试之用,最终生成的可执行文件在运行时并不需要这个符号文件,但你的程序中所有的变量信息都记录在这个文件中.所以调试 ...

  2. 融合虚拟与现实,AR Engine为用户提供沉浸式交互体验

    当今的应用市场中,传统的应用产品已经难以完全满足消费者的多样化需求.为了在竞争激烈的市场中脱颖而出,企业需要深入洞察用户需求,提供个性化的服务体验和差异化的产品创新,以吸引并留住消费者. 比如,购物类 ...

  3. 搭建离线yum源

    HTTP方式 安装步骤 系统:CentOS 7.6 yum install -y httpd vi /etc/httpd/conf/httpd.conf <Directory /> Opt ...

  4. Nuxt.js 应用中的 vite:extend 事件钩子详解

    title: Nuxt.js 应用中的 vite:extend 事件钩子详解 date: 2024/11/11 updated: 2024/11/11 author: cmdragon excerpt ...

  5. 2023NOIP A层联测16 T3 货物运输

    2023NOIP A层联测16 T3 货物运输 题目描述说这是一个仙人掌图,通常将问题转换为环和树的问题在使用圆方树来解决. 树解法 令 \(a_i=s_i-\frac{\sum s_i}{n}\) ...

  6. 《花100块做个摸鱼小网站! 》第十篇—响应式布局适配PC端和移动端

    ️基础链接导航️ 服务器 → ️ 阿里云活动地址 看样例 → 摸鱼小网站地址 学代码 → 源码库地址 一.前言 大家好呀,我是summo,小网站一直有个问题,就是PC端的样式和移动端的样式是两套,并且 ...

  7. 『玩转Streamlit』--片段Fragments

    在 Streamlit 应用开发中,Fragments组件是一种用于更精细地控制页面元素更新和显示顺序的工具. 它允许开发者将内容分解成多个小的片段,这些片段可以按照特定的顺序或者逻辑进行更新,而不是 ...

  8. RAG七十二式:2024年度RAG清单

    回顾2024,大模型日新月异,智能体百家争鸣.作为AI应用的重要组成部分,RAG也是"群雄逐鹿,诸侯并起".年初ModularRAG持续升温.GraphRAG大放异彩,年中开源工具 ...

  9. AE错误代码

    错误代码 错误描述 错误名称 HRESULT:0x80040201 "Failed to load a resource (string, icon, bitmap, etc)." ...

  10. 解读GaussDB的BTree索引和UBTree索引,如何带来更强并发能力

    本文分享自华为云社区<[GaussTech技术专栏]GaussDB的BTree索引和UBTree索引>,作者:GaussDB 数据库. 1. 简介 数据库通常使用索引来提高业务查询的速度. ...