1
bonfy 2017-03-25 09:19:30 +08:00 via iPhone
我猜是后者 orm 打印出 sql 看看呗
你要放内存自己弄个 list 存呗 |
2
yangqi 2017-03-25 09:20:37 +08:00 1
是 mysql 里面的分页, LIMIT offset, count
|
3
msg7086 2017-03-25 09:34:30 +08:00 1
ORM 是不会放在内存里的。
一来内存就炸了。 二来数据被修改了怎么办。 一般都是要多少读多少,显示完以后当场丢弃。 |
4
mcfog 2017-03-25 09:51:21 +08:00 via Android
先搞清楚什么是 ORM 什么是 Pagination 什么是数据库,再来重新提问吧
|
5
ivvei 2017-03-25 09:54:17 +08:00 via Android
这得看你 ORM 怎么写的啊。你要写成一次取完之后都是缓存也可以的啊,只是一般人不是这么干的而已。
|
6
sorra 2017-03-25 09:54:36 +08:00 1
复习一下分页查询 https://www.qingjingjie.com/blogs/24
通常是每页读一次的。如果是 Java 的 Hibernate ,它有预读功能,比如翻一页读取两页。 如果全读出来,就不用 ORM 分页了,你自己取 sub list 就可以。 |
8
mcfog 2017-03-25 12:45:47 +08:00 via Android
@liteyou 如果只是不清楚内部逻辑,提问方式应该是“ Laravel/Django/RoR 的分页机制是如何拉取数据的?是每次拉当前页还是一次性全部拉出来然后分页?“
首先分页这个事情是框架调用 orm 实现的,怎么实现是框架的问题。其次是 orm 只是个总称,这样问就好像问“下棋的时候第一步怎么走好?”一样,让别人很难回答,也许只能回答“怎么走胜率高就怎么走”,楼主这个问题也只能说“有的是这样实现的,有的是那样实现的,还有的几种都支持” |
10
rogwan OP |
11
sorra 2017-03-26 14:58:16 +08:00 1
@rogwan 那不就是 limit 设为 300 么。要想再往后取就设 offset 。
至于 Pagination 和 limit()能不能重复用,不了解 SQLAlchemy ,可能是后调用的覆盖先调用的,也可能报错。风格上不宜重复。 |
13
msg7086 2017-03-26 15:22:01 +08:00 1
拿 Rails 举个例子。
你说返回 300 是这个情况: Post.limit(300) #=> 300 条数据 SELECT * FROM Post LIMIT 300 实际上,假如 page 大小是 20 的话: Post.page(4) #=> 20 条数据 SELECT * FROM Post LIMIT 60,20 点了下一页: Post.page(5) #=> 20 条数据 SELECT * FROM Post LIMIT 80,20 不知道能不能让你理解。 |
14
yangqi 2017-03-26 22:23:30 +08:00 1
@rogwan ORM 里面的 limit()和 offset()最后都是转化成 mysql 查询的 limit 的,所以返回 1000 条就不能再 limit 了,只能在代码里面处理。
|
15
rogwan OP 谢谢,去设置下试试看。
|