浅析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的Django框架上部署ORM库的教程
Apr 20 Python
python实现在windows服务中新建进程的方法
Jun 30 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
基于Python的关键字监控及告警
Jul 06 Python
Python使用functools实现注解同步方法
Feb 06 Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
python人民币小写转大写辅助工具
Jun 20 Python
Python实现的爬取百度文库功能示例
Feb 16 Python
Python散点图与折线图绘制过程解析
Nov 30 Python
Pytest如何使用skip跳过执行测试
Aug 13 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
Nov 05 Python
教你怎么用Python实现多路径迷宫
Apr 29 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学习 计数器实例代码
2008/06/15 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
javascript正则表达式之search()用法实例
2015/01/19 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
2016/01/14 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
基于form-data请求格式详解
2019/10/29 Javascript
js实现简易ATM功能
2020/10/27 Javascript
vue实现防抖的实例代码
2021/01/11 Vue.js
Python3 入门教程 简单但比较不错
2009/11/29 Python
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
无法使用pip命令安装python第三方库的原因及解决方法
2018/06/12 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
pygame实现五子棋游戏
2019/10/29 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
捐款倡议书怎么写
2014/05/13 职场文书
三好生演讲稿
2014/09/12 职场文书
实习介绍信范文
2015/05/05 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
Python内置数据类型中的集合详解
2022/03/18 Python