コンテンツにスキップ

ページングと行数

次のメソッドを使用すると、クエリ内の行数をページングして制限できます。

  • 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_URL)、
        metadata=sqlalchemy. MetaData(),
        tablename="track"
    )

    id: int=ormar.Integer(プライマリキー=True)
    アルバム:オプション[Album]=ormar. ForeignKey(Album)
    name: str=ormar.String(max_length=100)
    位置: int=ormar.Integer()


tracks=await Track. object.paginate(3).all()
#41行目から始まる20トラックを返します。
#(デフォルトのページサイズは20)

paginate(2)はoff set(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_URL)、
        metadata=sqlalchemy. MetaData(),
        tablename="track"
    )

    id: int=ormar.Integer(プライマリキー=True)
    アルバム:オプション[Album]=ormar. ForeignKey(Album)
    name: str=ormar.String(max_length=100)
    位置: int=ormar.Integer()


tracks=await Track. object.limit(1).all()
#1つのトラックだけを返します

!!!ローを返さないすべてのメソッドは、QuerySetインスタンスを明示的に返すため、それらをリンクできます

1
2
3
そのため、`filter()`、`select_related()`、`limit()`、`offset()` などの操作をチェーン化することができます。

のようなもの `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_URL)、
        metadata=sqlalchemy. MetaData(),
        tablename="track"
    )

    id: int=ormar.Integer(プライマリキー=True)
    アルバム:オプション[Album]=ormar. ForeignKey(Album)
    name: str=ormar.String(max_length=100)
    位置: int=ormar.Integer()


tracks=await Track. object.off set(1).limit(1).all()
#は1つのトラックだけを返しますが、今回は2つ目のトラックを返します。

!!!ローを返さないすべてのメソッドは、QuerySetインスタンスを明示的に返すため、それらをリンクできます

1
2
3
そのため、`filter()`、`select_related()`、`limit()`、`offset()` などの操作をチェーン化することができます。

のようなもの `Track.object.select_related("album").filter(album__name="Malibu").offset(1).limit(1).all()`

得る

get(**kwargs)->モデル

kwargsの設定条件を満たす最初の行をデータベースから取得します。

条件が設定されていない場合は、dbのpkでソートされた最後の行を返します。(フィルター/除外を使用して条件を設定することもできません)。

!!!ヒントgetの詳細については、read/getにアクセスしてください

最初の

最初の()->モデル

プライマリキー列の昇順でソートされた最初のローをデータベースから取得します。

!!!ヒント初回訪問の詳細については、/firstをお読みください

QuerysetProxyメソッド

関連するManyTomanyフィールドとReverseForeignKeyに直接アクセスする場合は、関連するモデルのリストを返します。

ただし、QuerySet APIのサブセットを公開しているため、親モデルから直接フィルタリング、作成、関連モデルの選択などを行うことができます。

ページング

上記のページング機能とまったく同じですが、関係の反対側から関連するオブジェクトをページングすることができます。

!!!ヒントQuerysetProxyの詳細については、querysetproxyセクションにアクセスしてください

制限する

上記のlimit関数と全く同じですが、関連するオブジェクトをリレーションの反対側からページングすることができます。

!!!ヒントQuerysetProxyの詳細については、querysetproxyセクションにアクセスしてください

相殺する

上記のオフセット関数と全く同じですが、関連するオブジェクトをリレーションの反対側からページングすることができます。

!!!ヒントQuerysetProxyの詳細については、querysetproxyセクションにアクセスしてください