- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章浅析python中SQLAlchemy排序的一个坑由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前言 。
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。最近在使用SQLAlchemy排序遇到了一个坑,所以想着总结下来,分享给更多的朋友,下面来一起看看吧.
坑的代码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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
()
|
不坑的代码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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 高性能随机取出若干条数据 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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中SQLAlchemy排序的一个坑的文章就讲到这里了,如果你想了解更多关于浅析python中SQLAlchemy排序的一个坑的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
前言 每日站会(Daily Standup)是团队统一节奏的、在固定时间发生的、帮助团队内部快速同步进展的敏捷实践活动: 站会的目的是让团队能更好地对齐 Sprint 目标;
jdbcTemplate 中的queryForList,你真的懂吗? 你想象中的queryForList是不是应该长成下面这种模样? String sql = "select *
python是一门清晰简洁的语言,如果你对一些细节不了解的话,就会掉入到那些深不见底的“坑”里,下面,我就来总结一些python里常见的坑。 列表创建和引用 嵌套列表的创建 使用*号来创建一个
如今,在DevOps当中建立安全体系显得比以往任何时候都更加重要。《2021年企业DevOps技能提升报告》指出,56%的受访者表示DevSecOps已经成为自动化工具中的一大必备要素。然而,D
前言 相信看到这个题目,可能大家都觉得是一个老生常谈的月经topic了。一直以来其实把握一个“值传递”基本上就能理解各种情况了,不过最近遇到了更深一点的“小坑”,与大家分享一下。 首先还是从最简
前言 Go 中的for range组合可以和方便的实现对一个数组或切片进行遍历,但是在某些情况下使用for range时很可能就会被"坑",下面用一段代码来模拟下:
大家好,我是明哥。 在开始之前,先考你一个非常 Go 味的经典问题:如何判断一个 interface{} 的值是否为 nil ? 这也是面试有可能会被问到的一个问题,这个问题很 “迷”,平时
ava并发包有很大一部分内容都是关于并发容器的,因此学习和搞懂这部分的内容很有必要。 Java 1.5 之前提供的同步容器虽然也能保证线程安全,但是性能很差,而 Java 1.5 版本之后提供的并发
大家好,我是煎鱼。 前几天在读者交流群里看到一位小伙伴,针对 interface 的使用有了比较大的疑惑。 无独有偶,我也在网上看到有小伙伴在 Go 面试的时候被问到了:
我是一名优秀的程序员,十分优秀!