浅析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正则表达式修复网站文章字体不统一的解决方法
Feb 21 Python
Python 专题三 字符串的基础知识
Mar 19 Python
python矩阵转换为一维数组的实例
Jun 05 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
Jun 11 Python
Python Matplotlib库安装与基本作图示例
Jan 09 Python
django用户登录验证的完整示例代码
Jul 21 Python
python3 webp转gif格式的实现示例
Dec 10 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
Pandas —— resample()重采样和asfreq()频度转换方式
Feb 26 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 Python
Python PyQt5模块实现窗口GUI界面代码实例
May 12 Python
解析目标检测之IoU
Jun 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 ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
Angular脚手架开发的实现步骤
2019/04/09 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
Angular之jwt令牌身份验证的实现
2020/02/14 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
python学生信息管理系统(完整版)
2020/04/05 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
使用CSS3编写类似iOS中的复选框及带开关的按钮
2016/04/11 HTML / CSS
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
高校辅导员推荐信范文
2013/12/25 职场文书
高一物理教学反思
2014/01/24 职场文书
发展部经理职责规定
2014/02/22 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
工作报告范文
2019/06/20 职场文书