浅析python中SQLAlchemy排序的一个坑


Posted in Python onFebruary 24, 2017

前言

SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。最近在使用SQLAlchemy排序遇到了一个坑,所以想着总结下来,分享给更多的朋友,下面来一起看看吧。

坑的代码

query = db_session.query(UserVideo.vid,
         UserVideo.uid,
         UserVideo.v_width,
         UserVideo.v_height,
         UserVideo.create_time,
         UserVideo.cover,
         UserVideo.source_url,
         UserVideo.v_type,
         UserVideo.category,
         User.username,
         User.sex,
         UserExtraInfo.avatar,
         UserExtraInfo.watermark)
  query = query.filter(UserVideo.status == 1,
        User.uid == UserVideo.uid,
        UserExtraInfo.uid == UserVideo.uid) 
  query = query.filter(UserVideo.status == 1)
  query = query.order_by(-UserVideo.vid)
  query = query.limit(20).all()

不坑的代码

query = db_session.query(UserVideo.vid,
         UserVideo.uid,
         UserVideo.v_width,
         UserVideo.v_height,
         UserVideo.create_time,
         UserVideo.cover,
         UserVideo.source_url,
         UserVideo.v_type,
         UserVideo.category,
         User.username,
         User.sex,
         UserExtraInfo.avatar,
         UserExtraInfo.watermark)
  query = query.filter(UserVideo.status == 1,
        User.uid == UserVideo.uid,
        UserExtraInfo.uid == UserVideo.uid) # .order_by(UserVideo.vid.desc()).limit(20).all()
  query = query.filter(UserVideo.status == 1)
  query = query.order_by(UserVideo.vid.desc())
  query = query.limit(20).all()

对,你没看错,就是那个横杠,拉慢速度。改成 desc() 函数速度能提高10倍

下面附上一个 sqlalchemy 高性能随机取出若干条数据

query = db_session.query(UserVideo.vid,
          UserVideo.uid,
          UserVideo.v_width,
          UserVideo.v_height,
          UserVideo.create_time,
          UserVideo.cover,
          UserVideo.source_url,
          UserVideo.v_type,
          UserVideo.category,
          User.username,
          User.sex,
          UserExtraInfo.avatar,
          UserExtraInfo.watermark)
   query = query.filter(UserVideo.status == 1, User.uid == UserVideo.uid, UserExtraInfo.uid == UserVideo.uid)
rvid = db_session.query(func.round(random.random() * func.max(UserVideo.vid)).label('rvid')).subquery()
query = query.filter(UserVideo.category == category)
query_tail = query
query_tail = query_tail.join(rvid, UserVideo.vid > rvid.c.rvid).limit(20).all()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python里对list中的整数求平均并排序
Sep 12 Python
Python实现图片滑动式验证识别方法
Nov 09 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
Apr 23 Python
python训练数据时打乱训练数据与标签的两种方法小结
Nov 08 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
Python操作配置文件ini的三种方法讲解
Feb 22 Python
python实现最小二乘法线性拟合
Jul 19 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
Aug 17 Python
python+django+rest框架配置创建方法
Aug 31 Python
Python内置类型集合set和frozenset的使用详解
Apr 26 Python
python函数的5种参数详解
Feb 24 #Python
Python实现读取文件最后n行的方法
Feb 23 #Python
Python基础教程之tcp socket编程详解及简单实例
Feb 23 #Python
Python命令启动Web服务器实例详解
Feb 23 #Python
Python 基础教程之包和类的用法
Feb 23 #Python
python安装oracle扩展及数据库连接方法
Feb 21 #Python
python安装cx_Oracle模块常见问题与解决方法
Feb 21 #Python
You might like
php获得当前的脚本网址
2007/12/10 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
2016/06/22 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
深入探究node之Transform
2017/07/20 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
vue数据传递--我有特殊的实现技巧
2018/03/20 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
vue 清空input标签 中file的值操作
2020/07/21 Javascript
python文件操作相关知识点总结整理
2016/02/22 Python
Python实现的双色球生成功能示例
2017/12/18 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
python属于解释语言吗
2020/06/11 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
英国女装网上商店:I Saw It First
2018/10/18 全球购物
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
马智宇结婚主持词
2014/04/01 职场文书
爱国演讲稿400字
2014/05/07 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
考试诚信承诺书
2014/05/23 职场文书
大学第二课堂活动总结
2014/07/08 职场文书
2014年监理个人工作总结
2014/12/11 职场文书
护士个人年终总结
2015/02/13 职场文书
工作简历自我评价
2015/03/11 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书