浅析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操作xml文件详细介绍
Jun 09 Python
python通过urllib2获取带有中文参数url内容的方法
Mar 13 Python
Python中的Descriptor描述符学习教程
Jun 02 Python
Python机器学习之决策树算法实例详解
Dec 06 Python
python matplotlib 在指定的两个点之间连线方法
May 25 Python
pip命令无法使用的解决方法
Jun 12 Python
python3个性签名设计实现代码
Jun 19 Python
pandas使用get_dummies进行one-hot编码的方法
Jul 10 Python
对Python实现简单的API接口实例讲解
Dec 10 Python
结合OpenCV与TensorFlow进行人脸识别的实现
Oct 10 Python
Docker如何部署Python项目的实现详解
Oct 26 Python
matplotlib 范围选区(SpanSelector)的使用
Feb 24 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添加MySQL数据记录代码
2008/06/07 PHP
php运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
Django中的cookie与session操作实例代码
2017/08/17 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
把textarea中字符串里含有的回车换行替换成<br>的javascript代码
2007/04/20 Javascript
复制本贴标题和地址的js代码
2008/07/01 Javascript
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
AngularJS基础 ng-model 指令详解及示例代码
2016/08/02 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
搭建简单的nodejs http服务器详解
2017/03/09 NodeJs
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
详解vue高级特性
2020/06/09 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
详细介绍Ruby中的正则表达式
2015/04/10 Python
Python生成数字图片代码分享
2017/10/31 Python
python随机数分布random测试
2018/08/27 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
环保公益广告语
2014/03/13 职场文书
银行委托书范本
2014/04/04 职场文书
护理学院专科毕业生求职信
2014/06/28 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
致接力运动员加油稿
2015/07/21 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书