产品出库设备 发表于 2025-2-6 23:56:30

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

03 如何进行排序

3-1准备工作:

因为要排序,所以需要随机多谢数据,model见后文。也需要random进行随机
from model import User, Enginefrom sqlalchemy.orm import sessionmakerimport randomSession = sessionmaker(bind=Engine)session = Session()def add_random():    names = ['arthur', 'Abigail Williams', 'caster', 'Lilith']    ages =     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, Stringfrom sqlalchemy.orm import DeclarativeBase, mapped_column,Mappedfrom typing import Optionalurl = "sqlite:///database_02.db"                        #记得修改一下自己的数据库Engine = create_engine(url,echo=True)class Base(DeclarativeBase):                            #通过类构造,这样子会有语法提示    passclass User(Base):                                    #构造自己的User表    __tablename__ = "User"    id:Mapped = mapped_column(primary_key=True)       #构造方法和之前不一样,但是效果是一样的,我这里偷学了,不用管,直接复制就好    name:Mapped = mapped_column(nullable=True)    age:Mapped]    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, Enginefrom sqlalchemy.orm import sessionmakerimport randomSession = sessionmaker(bind=Engine)session = Session()def add_random():    names = ['arthur', 'Abigail Williams', 'caster', 'Lilith']    ages =     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()
页: [1]
查看完整版本: python SQLAlchemy ORM——从零开始学习03 如何针对数据库信息进行排序