浅析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 thread 并发且顺序运行示例
Apr 09 Python
Python中用PIL库批量给图片加上序号的教程
May 06 Python
详解在Python中处理异常的教程
May 24 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 Python
python skimage 连通性区域检测方法
Jun 21 Python
VSCode中自动为Python文件添加头部注释
Nov 14 Python
如何使用python传入不确定个数参数
Feb 18 Python
python实现翻译word表格小程序
Feb 27 Python
python实现logistic分类算法代码
Feb 28 Python
python自动化测试三部曲之request+django实现接口测试
Oct 07 Python
python 还原梯度下降算法实现一维线性回归
Oct 22 Python
如何用python写个模板引擎
Jan 14 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中json_decode()和json_encode()的使用方法
2012/06/04 PHP
PHP使用SOAP扩展实现WebService的方法
2016/04/01 PHP
PHP实现webshell扫描文件木马的方法
2017/07/31 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
jQuery1.6 使用方法二
2011/11/23 Javascript
javascript时区函数介绍
2012/09/14 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
2016/06/13 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
bootstrapValidator表单验证插件学习
2016/12/30 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
BootStrap 动态表单效果
2017/06/02 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
js实现删除json中指定的元素
2020/09/22 Javascript
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
Python重新加载模块的实现方法
2018/10/16 Python
python多环境切换及pyenv使用过程详解
2019/09/27 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
python实时监控logstash日志代码
2020/04/27 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
社区安全检查制度
2014/02/03 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
银行授权委托书样本
2014/10/13 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
Vue3 Composition API的使用简介
2021/03/29 Vue.js
python将图片转为矢量图的方法步骤
2021/03/30 Python
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL