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 最完整的資料庫操作的套件了,不過最令人垢病的是它的文件真的很難閱讀,如果不搭配個實例 ...
随机推荐
- Mysql(2)—SQL语法详解(通俗易懂)
一.关于SQL 1.1 简介 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准编程语言.它主要用于数据的查询.插入.更新和删除等操作.SQL ...
- Java中“=”克隆理解
在Java中,对于基本类型可以使用"="来进行克隆,此时两个变量除了相等是没有任何关系的. 而对于引用类型却不能简单地使用"="进行克隆,这与java的内存空间 ...
- 『玩转Streamlit』--文本与标题组件
本篇准备开始介绍Streamlit的组件. Streamlit的组件非常多,后续几篇打算按照用途的分类,介绍每个分类中最常用的组件. 本次从最简单的组件开始,介绍文本和标题相关的组件,也就是以下4个组 ...
- 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现五
一.前言介绍: 1.1 项目摘要 随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势.古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力.然而,在现代社会中 ...
- 17.Kubernetes搭建高可用集群
Kubernetes搭建高可用集群 前言 之前我们搭建的集群,只有一个master节点,当master节点宕机的时候,通过node将无法继续访问,而master主要是管理作用,所以整个集群将无法提供服 ...
- 多校A层冲刺NOIP2024模拟赛09
多校A层冲刺NOIP2024模拟赛09 考试唐完了,T2.T4 都挂了 100 分,人麻了. 排列最小生成树 给定一个 \(1, 2,\dots , n\) 的排列 \(p_1, p_2,\dots, ...
- 【Linux Ops】如何无痛升级 glibc
[环境]kos5.8sp2, kernel5.10 最近工作中需要搭建一个软件环境,其依赖的 glibc 版本较高,因此在安装时给出了以下错误: xxx: /lib64/libc.so.6: vers ...
- json编码格式化美化
有时候你想存储一个json到文件中,然后让别人调用或者读取或者作为临时存储,诸如此类. 但是php json_encode后数据是压缩的没有格式化,导致读起来有点费劲. 所以你可以这样(php 5.4 ...
- Java注解annotation用法和自定义注解处理器
前言: 在J2EE中,注解使得开发更加便利,省去了生成XML文件的过程,在Hibernate实体声明中,可以简简单单的用几个注解就可以免去生成一个XML的文件操作.这里就主要论述一下annotatio ...
- 避免代码冗余,使用接口和泛型重构Java代码
本文由 ImportNew - ImportNew读者 翻译自 michaelbrameld.如需转载本文,请先参见文章末尾处的转载要求. [感谢 李云涛(@平等的黑)的热心翻译.如果其他朋友也有不错 ...