sqlAlchemy三种排序方式

sqlalceemy排序方式有三种,接下来分别讲讲这三种的用法。

第一种:直接在查询语句中使用order_by

现在就用第一种方法实现刚才所说(最新注册的用户的拍在前面),最新注册的也就是时间最大的。代码如下

    results = session.query(User).order_by(User.create_time.desc()).all()
    print(results)

运行结果如下。


嗯,结果如我们所愿(时间按从大到小排列)。效果是实现了,还有没有其它法子(与此类似,在查询中实现排序)呢????答案是有,下面我们就试试另外一种法子。把表字段名作为字符串放在order_by里面就ok了,说干咱就干!

    results = session.query(User).order_by("create_time").all()
    print(results)

估计心急的小伙伴迫不及待试了一遍之后,发现效果和默认查询结果(从小到大)一毛一样,结果如下


是的,没错,我在这挖了个小小的坑!要想实现我们想要的效果,只需在order_by里面的字符串前面加上 - 号就OK了。代码及结果如下


第二种:在定义模型时声明排序方式
有没有小伙伴和我一样,觉得每次在查询中定义排序太费时,太麻烦了。有没有什么更好的办法,让我们查询时自动排序。


我们在创建模型时,通过定义一个类属性 __mapper_args__,将其order_by设置为 create_time.desc() 即可,完整代码如下

    class User(Base):
    __tablename__ = "user"
    id = Column(Integer , primary_key=True , autoincrement=True)
    name = Column(String(50) , nullable=False)
    create_time = Column(DateTime , nullable=False , default=datetime.now)
   
    __mapper_args__ = {
    "order_by":create_time.desc()
    }
    def __repr__(self):
          return "name:%s,create_time:%s"%(self.name,self.create_time)

然后我们再查询下,查询代码如下:

    results = session.query(User).all()
    print(results)

运行查询代码,结果一样能实现我们想要的效果。

第三种:relationship
在指定relationship的时候,传递order_bu参数来指定排序的字段
 例如: author = relationship('User', backref=backref( 'articles',order_by=create_time.desc())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值