python SQLAlchemy ORM——从零开始学习03 如何针对数据库信息进行排序

03 如何进行排序

3-1准备工作:

因为要排序,所以需要随机多谢数据,model见后文。也需要random进行随机

python 复制代码
from model import User, Engine
from sqlalchemy.orm import sessionmaker
import random

Session = sessionmaker(bind=Engine)
session = Session()
python 复制代码
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了,或者你自己修改都可以

python 复制代码
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)

其实基本上同理,他可以接收多个参数

python 复制代码
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

python 复制代码
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

python 复制代码
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()
相关推荐
QxQ么么7 分钟前
移远通信(桂林)26校招-助理AI算法工程师-面试纪录
人工智能·python·算法·面试
执笔论英雄35 分钟前
Slime异步原理(单例设计模式)4
开发语言·python·设计模式
小徐敲java2 小时前
python使用s7协议与plc进行数据通讯(HslCommunication模拟)
开发语言·python
猫头虎2 小时前
如何解决 pip install 编译报错 fatal error: hdf5.h: No such file or directory(h5py)问题
人工智能·python·pycharm·开源·beautifulsoup·ai编程·pip
p***23362 小时前
python的sql解析库-sqlparse
数据库·python·sql
陈奕昆3 小时前
n8n实战营Day1课时3:高频节点解析+Webhook表单同步Excel实操
人工智能·python·n8n
深蓝电商API3 小时前
动态 Token、加密参数逆向全流程:从原理到实战破解
爬虫·python
qq_17082750 CNC注塑机数采3 小时前
【Python TensorFlow】 TCN-GRU时间序列卷积门控循环神经网络时序预测算法(附代码)
python·rnn·神经网络·机器学习·gru·tensorflow·tcn
java1234_小锋3 小时前
基于Python深度学习的车辆车牌识别系统(PyTorch2卷积神经网络CNN+OpenCV4实现)视频教程 - 切割车牌矩阵获取车牌字符
python·深度学习·cnn·车牌识别
u***28473 小时前
Python连接SQL SEVER数据库全流程
数据库·python·sql