Lewati ke isi

fungsi agregat

Saat ini, enam fungsi agregasi didukung.

  • count(distinct: bool = True) -> int

  • Keberadaan () - > Boolean

  • Ringkasan (kolom) - > sewenang-wenang

  • Rata-rata (kolom) - > sewenang-wenang

  • Menit (kolom) - > apa saja

  • Maksimum (kolom) - > sewenang-wenang

  • Agen Setelan Kueri

    • QuerysetProxy.count(distinct=True) metode
    • QuerysetProxy.there () metode
    • Metode QuerysetProxy.sum (kolom)
    • Metode QuerysetProxy.avg (kolom)
    • Metode QuerysetProxy.min (kolom)
    • Metode QuerysetProxy.max (kolom)

menghitung

count(distinct: bool = True) -> int

Mengembalikan jumlah baris yang sesuai dengan kriteria yang diberikan (yaitu menerapkan filter dan pengecualian). Jika berbeda adalah Benar (default), ini mengembalikan jumlah baris utama yang dipilih. Jika Salah, hitungannya adalah jumlah total baris yang dikembalikan (termasuk baris tambahan untuk satu-ke-banyak atau banyak-ke-banyak kiri pilih\ _ lated table join). Salah adalah perilaku warisan (cacat) untuk alur kerja yang bergantung padanya.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
Buku Kelas (ormar. Model):
    ormar _ config = ormar. OrmarConfig (
        Database = database. Database (DATABASE _ URL),
        Metadata = sqlalchemy. MetaData (),
        Nama meja = "buku"
    )

    Id: int = ormar. Integer (primary _ key = Benar)
    Judul: str = ormar. String (max _ length = 200)
    Penulis: str = ormar. String (max _ length = 100)
    Genre: str = ormar. String (
        maks _ panjang = 100,
        Default = "Fiksi,"
        Pilihan = ["Fiksi," "Petualangan," "Bersejarah," "Fantasi"],
    )


# mengembalikan jumlah baris dalam db untuk model Buku
no _ of _ books = menunggu Book.objeks.count ()

ada

Keberadaan () - > Boolean

Mengembalikan nilai Boolean untuk mengkonfirmasi apakah ada baris yang memenuhi kriteria yang diberikan (diterapkan dengan filter dan pengecualian).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
Buku Kelas (ormar. Model):
    ormar _ config = ormar. OrmarConfig (
        Database = database. Database (DATABASE _ URL),
        Metadata = sqlalchemy. MetaData (),
        Nama meja = "buku"
    )

    Id: int = ormar. Integer (primary _ key = Benar)
    Judul: str = ormar. String (max _ length = 200)
    Penulis: str = ormar. String (max _ length = 100)
    Genre: str = ormar. String (
        maks _ panjang = 100,
        Default = "Fiksi,"
        Pilihan = ["Fiksi," "Petualangan," "Bersejarah," "Fantasi"],
    )


# mengembalikan nilai boolean jika baris yang diberikan ada
has _ sample = await Book.objeks.filter (judul = 'Sample').exist ()

dan

Ringkasan (kolom) - > sewenang-wenang

Mengembalikan jumlah kolom baris yang sesuai dengan kriteria yang diberikan (terapkan filter, tidak termasuk jika diatur sebelumnya).

Anda dapat melewati satu atau lebih nama kolom, termasuk kolom terkait.

Sampai sekarang, setiap kolom yang dilewati dikumpulkan secara terpisah (jadi jumlah (col1 + col2) tidak mungkin, Anda dapat menggunakan jumlah (col1, col2) dan kemudian menambahkan jumlah 2 yang dikembalikan dalam python).

Anda tidak dapat menjumlahkan kolom non-numerik.

Jika Anda mengumpulkan satu kolom, kembalikan satu nilai secara langsung sebagai hasilnya, dan jika Anda mengumpulkan beberapa kolom, kembalikan kamus yang berisi kolom: pasangan hasil

Model yang diberikan adalah sebagai berikut:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from typing import Optional

import databases
import ormar
import sqlalchemy
from tests.settings import DATABASE_URL

database = databases.Database(DATABASE_URL)
metadata = sqlalchemy.MetaData()


base_ormar_config = ormar.OrmarConfig(
    metadata=metadata,
    database=database,
)


class Author(ormar.Model):
    ormar_config = base_ormar_config.copy(tablename="authors", order_by=["-name"])

    id: int = ormar.Integer(primary_key=True)
    name: str = ormar.String(max_length=100)


class Book(ormar.Model):

    ormar_config = base_ormar_config.copy(
        tablename="books", order_by=["year", "-ranking"]
    )

    id: int = ormar.Integer(primary_key=True)
    author: Optional[Author] = ormar.ForeignKey(Author)
    title: str = ormar.String(max_length=100)
    year: int = ormar.Integer(nullable=True)
    ranking: int = ormar.Integer(nullable=True)

Contoh penggunaan mungkin terlihat seperti ini

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Author = await Author (nama = "Author 1").save ()
Menunggu Buku (judul = "Buku 1," tahun = 1920, peringkat = 3, penulis = penulis).simpan ()
Menunggu Buku (judul = "Buku 2," tahun = 1930, peringkat = 1, penulis = penulis).simpan ()
Menunggu Buku (judul = "Buku 3," tahun = 1923, peringkat = 5, penulis = penulis).simpan ()

Tegaskan menunggu Book.objeks.sum ("tahun") = = 5773
Hasil = menunggu Book.objeks.sum (["tahun," "peringkat"])
Hasil yang ditentukan = = dict (tahun = 5773, peringkat = 9)

Coba:
    # tidak dapat menjumlahkan kolom string
    Menunggu Book.objeks.sum ("judul")
Kecuali ormar. QueryDefinitionError:
    Lulus

Tegaskan menunggu Author.objeks.select _ related ("buku").sum ("buku _ _ tahun") = = 5773
Hasil = menunggu Author.objeks.select _ terkait ("buku").sum (
    ["buku _ _ tahun," "buku _ _ peringkat"]
)
Tegaskan hasil = = dict (buku _ _ year = 5773, buku _ _ ranking = 9)

Tegaskan (
    await Author.objeks.select _ terkait ("buku")
    . Filter (buku _ _ year _ _ lt = 1925)
    . Ringkasan ("buku _ _ tahun")
    == 3843
)

rata-rata

Rata-rata (kolom) - > sewenang-wenang

Mengembalikan rata-rata kolom untuk baris yang sesuai dengan kriteria yang diberikan (terapkan filter, tidak termasuk jika diatur sebelumnya).

Anda dapat melewati satu atau lebih nama kolom, termasuk kolom terkait.

Sampai sekarang, setiap kolom yang dilewati dikumpulkan secara terpisah (jadi jumlah (col1 + col2) tidak mungkin, Anda dapat menggunakan jumlah (col1, col2) dan kemudian menambahkan jumlah 2 yang dikembalikan dalam python).

Anda tidak dapat rata-rata kolom non-numerik.

Jika Anda mengumpulkan satu kolom, kembalikan satu nilai secara langsung sebagai hasilnya, dan jika Anda mengumpulkan beberapa kolom, kembalikan kamus yang berisi kolom: pasangan hasil

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from typing import Optional

import databases
import ormar
import sqlalchemy
from tests.settings import DATABASE_URL

database = databases.Database(DATABASE_URL)
metadata = sqlalchemy.MetaData()


base_ormar_config = ormar.OrmarConfig(
    metadata=metadata,
    database=database,
)


class Author(ormar.Model):
    ormar_config = base_ormar_config.copy(tablename="authors", order_by=["-name"])

    id: int = ormar.Integer(primary_key=True)
    name: str = ormar.String(max_length=100)


class Book(ormar.Model):

    ormar_config = base_ormar_config.copy(
        tablename="books", order_by=["year", "-ranking"]
    )

    id: int = ormar.Integer(primary_key=True)
    author: Optional[Author] = ormar.ForeignKey(Author)
    title: str = ormar.String(max_length=100)
    year: int = ormar.Integer(nullable=True)
    ranking: int = ormar.Integer(nullable=True)

Contoh penggunaan mungkin terlihat seperti ini

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Author = await Author (nama = "Author 1").save ()
Menunggu Buku (judul = "Buku 1," tahun = 1920, peringkat = 3, penulis = penulis).simpan ()
Menunggu Buku (judul = "Buku 2," tahun = 1930, peringkat = 1, penulis = penulis).simpan ()
Menunggu Buku (judul = "Buku 3," tahun = 1923, peringkat = 5, penulis = penulis).simpan ()

Tegaskan bulat (float (tunggu Book.objeks.avg ("tahun"), 2) = = 1924.33
Hasil = menunggu Book.objeks.avg (["tahun," "peringkat"])
Tegaskan putaran (float (hasil ("tahun")), 2) = = 1924.33
Tegaskan hasil.dapatkan ("peringkat") = = 3.0

Coba:
    # tidak dapat avg kolom string
    Menunggu Book.objeks.avg ("judul")
Kecuali ormar. QueryDefinitionError:
    Lulus

Hasil = await Author.objeks.select _ related ("buku").avg ("buku _ _ tahun")
Ditegaskan bulat (float (hasil), 2) = = 1924.33
Hasil = menunggu Author.objeks.select _ terkait ("buku").avg (
    ["buku _ _ tahun," "buku _ _ peringkat"]
)
Tegaskan bulat (mengapung (hasil.get ("buku _ _ tahun")), 2) = 1924.33
Tegaskan hasil.dapatkan ("buku _ _ peringkat") = = 3.0

Tegaskan (
    await Author.objeks.select _ terkait ("buku")
    . Filter (buku _ _ year _ _ lt = 1925)
    . Rata-rata ("buku _ _ tahun")
    == 1921.5
)

menit

Menit (kolom) - > apa saja

Mengembalikan nilai minimum kolom untuk baris yang sesuai dengan kriteria yang diberikan (diterapkan dengan filter, tidak termasuk jika ditetapkan sebelumnya).

Anda dapat melewati satu atau lebih nama kolom, termasuk kolom terkait.

Sampai sekarang, setiap kolom yang dilewati dikumpulkan secara terpisah (jadi jumlah (col1 + col2) tidak mungkin, Anda dapat menggunakan jumlah (col1, col2) dan kemudian menambahkan jumlah 2 yang dikembalikan dalam python).

Jika Anda mengumpulkan satu kolom, kembalikan satu nilai secara langsung sebagai hasilnya, dan jika Anda mengumpulkan beberapa kolom, kembalikan kamus yang berisi kolom: pasangan hasil

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from typing import Optional

import databases
import ormar
import sqlalchemy
from tests.settings import DATABASE_URL

database = databases.Database(DATABASE_URL)
metadata = sqlalchemy.MetaData()


base_ormar_config = ormar.OrmarConfig(
    metadata=metadata,
    database=database,
)


class Author(ormar.Model):
    ormar_config = base_ormar_config.copy(tablename="authors", order_by=["-name"])

    id: int = ormar.Integer(primary_key=True)
    name: str = ormar.String(max_length=100)


class Book(ormar.Model):

    ormar_config = base_ormar_config.copy(
        tablename="books", order_by=["year", "-ranking"]
    )

    id: int = ormar.Integer(primary_key=True)
    author: Optional[Author] = ormar.ForeignKey(Author)
    title: str = ormar.String(max_length=100)
    year: int = ormar.Integer(nullable=True)
    ranking: int = ormar.Integer(nullable=True)

Contoh penggunaan mungkin terlihat seperti ini

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Author = await Author (nama = "Author 1").save ()
Menunggu Buku (judul = "Buku 1," tahun = 1920, peringkat = 3, penulis = penulis).simpan ()
Menunggu Buku (judul = "Buku 2," tahun = 1930, peringkat = 1, penulis = penulis).simpan ()
Menunggu Buku (judul = "Buku 3," tahun = 1923, peringkat = 5, penulis = penulis).simpan ()

Penegasan menunggu Book.objeks.min ("tahun") = = 1920
Hasil = menunggu Book.objeks.min (["tahun," "peringkat"])
Hasil yang ditentukan = = dict (tahun = 1920, peringkat = 1)

Tegaskan menunggu Book.objeks.min ("judul") = = "Buku 1"

Tegaskan menunggu Author.objeks.select _ terkait ("buku").min ("buku _ _ tahun") = = 1920
Hasil = menunggu Author.objeks.select _ terkait ("buku").min (
    ["buku _ _ tahun," "buku _ _ peringkat"]
)
Hasil pencuci mulut = = dict (buku _ _ year = 1920, buku _ _ ranking = 1)

Tegaskan (
    await Author.objeks.select _ terkait ("buku")
    . Filter (buku _ _ year _ _ gt = 1925)
    . Min ("buku _ _ tahun")
    == 1930
)

maksimal

Maksimum (kolom) - > sewenang-wenang

Mengembalikan nilai maksimum kolom untuk baris yang sesuai dengan kriteria yang diberikan (diterapkan dengan filter, tidak termasuk jika ditetapkan sebelumnya).

Mengembalikan nilai minimum kolom untuk baris yang sesuai dengan kriteria yang diberikan (diterapkan dengan filter, tidak termasuk jika ditetapkan sebelumnya).

Anda dapat melewati satu atau lebih nama kolom, termasuk kolom terkait.

Sampai sekarang, setiap kolom yang dilewati dikumpulkan secara terpisah (jadi jumlah (col1 + col2) tidak mungkin, Anda dapat menggunakan jumlah (col1, col2) dan kemudian menambahkan jumlah 2 yang dikembalikan dalam python).

Jika Anda mengumpulkan satu kolom, kembalikan satu nilai secara langsung sebagai hasilnya, dan jika Anda mengumpulkan beberapa kolom, kembalikan kamus yang berisi kolom: pasangan hasil

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from typing import Optional

import databases
import ormar
import sqlalchemy
from tests.settings import DATABASE_URL

database = databases.Database(DATABASE_URL)
metadata = sqlalchemy.MetaData()


base_ormar_config = ormar.OrmarConfig(
    metadata=metadata,
    database=database,
)


class Author(ormar.Model):
    ormar_config = base_ormar_config.copy(tablename="authors", order_by=["-name"])

    id: int = ormar.Integer(primary_key=True)
    name: str = ormar.String(max_length=100)


class Book(ormar.Model):

    ormar_config = base_ormar_config.copy(
        tablename="books", order_by=["year", "-ranking"]
    )

    id: int = ormar.Integer(primary_key=True)
    author: Optional[Author] = ormar.ForeignKey(Author)
    title: str = ormar.String(max_length=100)
    year: int = ormar.Integer(nullable=True)
    ranking: int = ormar.Integer(nullable=True)

Contoh penggunaan mungkin terlihat seperti ini

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Author = await Author (nama = "Author 1").save ()
Menunggu Buku (judul = "Buku 1," tahun = 1920, peringkat = 3, penulis = penulis).simpan ()
Menunggu Buku (judul = "Buku 2," tahun = 1930, peringkat = 1, penulis = penulis).simpan ()
Menunggu Buku (judul = "Buku 3," tahun = 1923, peringkat = 5, penulis = penulis).simpan ()

Tegaskan menunggu Book.objeks.max ("tahun") = = 1930
Hasil = menunggu Book.objeks.max (["tahun," "peringkat"])
Hasil yang ditegaskan = = dict (tahun = 1930, peringkat = 5)

Tegaskan menunggu Book.objeks.max ("judul") = = "Buku 3"

Tegaskan menunggu Author.objeks.select _ related ("buku").max ("buku _ _ tahun") = = 1930
Hasil = menunggu Author.objeks.select _ terkait ("buku").max (
    ["buku _ _ tahun," "buku _ _ peringkat"]
)
Tegaskan hasil = = dict (buku _ _ year = 1930, buku _ _ ranking = 5)

Tegaskan (
    await Author.objeks.select _ terkait ("buku")
    . Filter (buku _ _ year _ _ lt = 1925)
    . Maks ("buku _ _ tahun")
    == 1923
)

Metode QuerysetProxy

Saat mengakses bidang ManyToMany dan ReverseForeignKey yang relevan secara langsung, daftar model terkait dikembalikan.

Tetapi juga memaparkan subset dari QuerySet API, sehingga Anda dapat memfilter, membuat, memilih model terkait, dll. langsung dari model induk.

menghitung

Sama seperti fungsi penghitungan di atas, tetapi memungkinkan Anda untuk memilih kolom dari objek terkait di ujung lain hubungan.

!!!Untuk mempelajari lebih lanjut tentang QuerysetProxy, kunjungi bagian QuerysetProxy

ada

Sama seperti fungsi kehadiran di atas, tetapi memungkinkan Anda untuk memilih kolom dari objek terkait di ujung lain hubungan.

dan

Sama seperti fungsi penjumlahan di atas, tetapi memungkinkan Anda untuk menjumlahkan kolom objek terkait di ujung lain hubungan.

rata-rata

Sama seperti fungsi avg di atas, tetapi memungkinkan Anda untuk rata-rata kolom objek terkait di ujung lain hubungan.

menit

Sama seperti fungsi min di atas, tetapi memungkinkan Anda untuk memilih jumlah kolom paling sedikit dari objek terkait di ujung lain hubungan.

maksimal

Fungsi max persis sama seperti di atas, tetapi memungkinkan Anda untuk memilih kolom terbesar dari objek terkait di ujung lain hubungan.

!!!Untuk mempelajari lebih lanjut tentang QuerysetProxy, kunjungi bagian QuerysetProxy