分页和行数
以下方法允许您对查询中的行数进行分页和限制。
-
paginate(page: int) -> QuerySet
-
limit(limit_count: int) -> QuerySet
-
offset(offset: int) -> QuerySet
-
get() -> 模型
-
第一个() -> 模型
-
查询集代理
QuerysetProxy.paginate(page: int)
方法
QuerysetProxy.limit(limit_count: int)
方法
QuerysetProxy.offset(offset: int)
方法
分页
paginate(page: int, page_size: int = 20) -> QuerySet
结合了基于页码和大小的偏移和限制方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | class Track(ormar.Model):
ormar_config = ormar.OrmarConfig(
database=databases.Database(DATABASE_URL),
metadata=sqlalchemy.MetaData(),
tablename="track"
)
id: int = ormar.Integer(primary_key=True)
album: Optional[Album] = ormar.ForeignKey(Album)
name: str = ormar.String(max_length=100)
position: int = ormar.Integer()
tracks = await Track.objects.paginate(3).all()
# will return 20 tracks starting at row 41
# (with default page size of 20)
|
请注意, paginate(2) 相当于 offset(20).limit(20)
限制
limit(limit_count: int, limit_raw_sql: bool = None) -> QuerySet
您可以将结果限制为所需的父模型数量。
要限制数据库查询行的实际数量而不是主模型的数量,请使用 limit_raw_sql 参数标志,并将其设置为 True。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | class Track(ormar.Model):
ormar.OrmarConfig(
database=databases.Database(DATABASE_URL),
metadata=sqlalchemy.MetaData(),
tablename="track"
)
id: int = ormar.Integer(primary_key=True)
album: Optional[Album] = ormar.ForeignKey(Album)
name: str = ormar.String(max_length=100)
position: int = ormar.Integer()
tracks = await Track.objects.limit(1).all()
# will return just one Track
|
!!!注意所有不返回行的方法显式返回一个 QuerySet 实例,以便您可以将它们链接在一起
| So operations like `filter()`, `select_related()`, `limit()` and `offset()` etc. can be chained.
Something like `Track.object.select_related("album").filter(album__name="Malibu").offset(1).limit(1).all()`
|
抵消
offset(offset: int, limit_raw_sql: bool = None) -> QuerySet
您还可以通过所需的主模型数量来抵消结果。
要偏移数据库查询行的实际数量而不是主模型的数量,请使用 limit_raw_sql 参数标志,并将其设置为 True。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | class Track(ormar.Model):
ormar.OrmarConfig(
database=databases.Database(DATABASE_URL),
metadata=sqlalchemy.MetaData(),
tablename="track"
)
id: int = ormar.Integer(primary_key=True)
album: Optional[Album] = ormar.ForeignKey(Album)
name: str = ormar.String(max_length=100)
position: int = ormar.Integer()
tracks = await Track.objects.offset(1).limit(1).all()
# will return just one Track, but this time the second one
|
!!!注意所有不返回行的方法显式返回一个 QuerySet 实例,以便您可以将它们链接在一起
| So operations like `filter()`, `select_related()`, `limit()` and `offset()` etc. can be chained.
Something like `Track.object.select_related("album").filter(album__name="Malibu").offset(1).limit(1).all()`
|
得到
get(**kwargs) -> 模型
从数据库中获取满足 kwargs 设置条件的第一行。
如果没有设置条件,它将返回 db 中按 pk 排序的最后一行。 (也不能使用过滤/排除来设置条件)。
!!!tip 要了解有关 get 的更多信息,请访问 read/get
第一的
第一个() -> 模型
从数据库中获取按主键列升序排序的第一行。
!!!tip 要了解有关首次访问的更多信息,请阅读/first
QuerysetProxy 方法
当直接访问相关的ManyToMany字段以及ReverseForeignKey时,返回相关模型的列表。
但同时它公开了 QuerySet API 的子集,因此您可以直接从父模型过滤、创建、选择相关模型等。
分页
与上面的分页功能完全相同,但允许您从关系的另一端对相关对象进行分页。
!!!tip 要了解有关 QuerysetProxy 的更多信息,请访问 querysetproxy 部分
限制
与上面的 limit 函数完全相同,但允许您从关系的另一侧对相关对象进行分页。
!!!tip 要了解有关 QuerysetProxy 的更多信息,请访问 querysetproxy 部分
抵消
与上面的偏移函数完全相同,但允许您从关系的另一侧对相关对象进行分页。
!!!tip 要了解有关 QuerysetProxy 的更多信息,请访问 querysetproxy 部分