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