Lewati ke isi

Baca data dari database

Metode berikut memungkinkan Anda untuk memuat data dari database.

  • Mendapatkan (*Args,*\ * kwargs) - > model

  • get_or_create(_defaults: Optional[Dict[str, Any]] = None, *args, **kwargs) -> Tuple[Model, bool]

  • first(*args, **kwargs) -> Model

  • all(*args, **kwargs) -> List[Optional[Model]]

  • iterate(*args, **kwargs) -> AsyncGenerator[Model]

  • model

    • Metode model.load ()
    • Agen Setelan Kueri

    • QuerysetProxy.get(*args, **kwargs) metode

    • QuerysetProxy.get_or_create(_defaults: Optional[Dict[str, Any]] = None, *args, **kwargs) metode
    • QuerysetProxy.first(*args, **kwargs) metode
    • QuerysetProxy.all(*args, **kwargs) metode

mendapatkan

Dapatkan (*args,*\ * kwargs) - > model

Mendapatkan baris pertama dari database yang memenuhi kondisi set kwargs.

Jika tidak ada kondisi yang ditetapkan, ia mengembalikan baris terakhir dalam database yang diurutkan berdasarkan kolom pk.

Melewati suatu kondisi sebenarnya menyebut metode filter (*args,*\ * kwargs) yang dijelaskan di bawah ini.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
Jalur Kelas (ormar. Model):
    ormar _ config = ormar. OrmarConfig (
        Database = database,
        Metadata = metadata,
        Nama tabel = "lacak"
    )

    Id: int = ormar. Integer (primary _ key = Benar)
    Album: Opsional [Album] = ormar. ForeignKey (Album)
    Nama: str = ormar. String (max _ length = 100)
    Posisi: int = ormar. Integer ()


Track = menunggu Track.objeks.get (nama = 'Burung')
# perhatikan bahwa di atas setara dengan menunggu Track.objeks.filter (nama = 'Burung').get ()
Track2 = track = waiting Track.obts.get ()
Lacak = = lacak
# Benar karena itu satu-satunya baris dalam db dalam contoh kita
# dan dapatkan tanpa argumen kembali baris pertama oleh kolom pk desc

!!!Peringatan, jika tidak ada baris yang memenuhi syarat, pengecualian NoMatch akan dilemparkan.

1
Jika ada beberapa baris yang memenuhi kriteria, pengecualian `MultipleMatches` dinaikkan.

Dapatkan atau tidak sama sekali

get_or_none(*args, **kwargs) -> Model

Ini persis sama dengan yang dijelaskan di atas, tetapi jika tidak ada catatan database yang cocok dengan kriteria yang ditemukan, Tidak ada yang dikembalikan alih-alih pengecualian yang dilemparkan.

Memperoleh atau membuat

get_or_create(_defaults: Optional[Dict[str, Any]] = None, *args, **kwargs) -> Tuple[Model, bool]

Buat dan dapatkan kombinasi metode.

Upaya untuk mendapatkan baris yang memenuhi kriteria, dan jika pengecualian NoMatch dilemparkan, baris baru dibuat dengan kwarg dan\ _ default yang diberikan.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
Album Kelas (ormar. Model):
    ormar _ config = base _ ormar _ config (tablename = "album")

    Id: int = ormar. Integer (primary _ key = Benar)
    Nama: str = ormar. String (max _ length = 100)
    Tahun: int = ormar. Integer ()


Album, dibuat = menunggu Album.objeks.get _ or _ create (nama = 'The Cat', _ defaults ={"year": 1999})
Penegasan yang dibuat adalah Benar
Tegaskan album.name = = "Kucing"
Ditegaskan album.year = = 1999
# objek dibuat karena tidak ada
Album2, dibuat = menunggu Album.objeks.get _ or _ create (nama = 'The Cat')
Menegaskan yang dibuat adalah Salah
Album pencuci mulut = = album2
# kembali Benar saat baris db yang sama dikembalikan

Album peringatan!!!dan album2 pada contoh di atas adalah 2 objek Python yang berbeda, meskipun baris yang setara dalam database! Memperbarui salah satunya tidak akan menyegarkan yang kedua sampai Anda secara eksplisit memuat () data baru dari database.

Perhatikan bahwa jika Anda ingin membuat objek baru, Anda harus melewati nilai kolom pk, atau kolom pk harus disetel ke kenaikan otomatis

pertama

first(*args, **kwargs) -> Model

Mendapat baris pertama diurutkan dalam urutan menaik dengan kolom kunci utama dari database.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Album Kelas (ormar. Model):
    ormar _ config = base _ ormar _ config (tablename = "album")

    Id: int = ormar. Integer (primary _ key = Benar)
    Nama: str = ormar. String (max _ length = 100)


Menunggu Album.objeks.buat (nama = 'Kucing')
Menunggu Album.objeks.buat (nama = 'Anjing')
Album = tunggu Album.objeks.first ()
# baris pertama oleh kolom utama _ kunci asc
Assert album.name = = 'Kucing'

semuanya

all(*args, **kwargs) -> List[Optional["Model"]]

Untuk opsi filter set, kembalikan semua baris dalam database untuk model yang diberikan.

Kwarg lewat adalah jalan pintas yang setara dengan memanggil filter (*args,*\ * kwargs).all ().

Jika tidak ada baris yang memenuhi syarat, daftar kosong dikembalikan.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
Album Kelas (ormar. Model):
    ormar _ config = base _ ormar _ config (tablename = "album")

    Id: int = ormar. Integer (primary _ key = Benar)
    Nama: str = ormar. String (max _ length = 100)


Jalur Kelas (ormar. Model):
    ormar _ config = base _ ormar _ config (tablename = "track")

    Id: int = ormar. Integer (primary _ key = Benar)
    Album: Opsional [Album] = ormar. ForeignKey (Album)
    Judul: str = ormar. String (max _ length = 100)
    Posisi: int = ormar. Integer ()


Trek = await Track.objeks.select _ related ("album").all (album _ _ title = 'Sampel')
# akan mengembalikan daftar semua Trek untuk sampel album
# untuk lebih lanjut tentang bergabung, kunjungi bagian bergabung dan subkueri

Trek = menunggu Track.objeks.all ()
# akan mengembalikan daftar semua Trek di database

iterasi

iterate(*args, **kwargs) -> AsyncGenerator["Model"]

Mengembalikan generator iterable asinkron untuk semua baris dalam database untuk model tertentu.

Arg dan / atau kwarg yang lewat adalah jalan pintas yang setara dengan memanggil filter(*args, **kwargs).iterate().

Jika tidak ada baris yang memenuhi kondisi tersebut, generator asinkron kosong dikembalikan.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Album Kelas (ormar. Model):
    ormar _ config = base _ ormar _ config (tablename = "album")

    Id: int = ormar. Integer (primary _ key = Benar)
    Nama: str = ormar. String (max _ length = 100)


Menunggu Album.objeks.buat (nama = 'Kucing')
Menunggu Album.objeks.buat (nama = 'Anjing')
# akan secara asinkron mengulangi semua model Album yang menghasilkan satu model utama sekaligus dari generator
Sinkronisasi untuk album di Album.objekiterate ():
    Cetak (album.name)

# Kucing
# Anjing

!!!memperingatkan bahwa menggunakan iterasi () akan menyebabkan panggilan sebelumnya ke prefetch\ _ lated () diabaikan; tidak masuk akal untuk menyatukan kedua optimasi.

1
Jika `iterate()`&`prefetch_related()` digunakan bersama-sama, pengecualian `QueryDefinitionError` dinaikkan.

metode model

Setiap contoh model memiliki seperangkat metode untuk menyimpan, memperbarui, atau memuat dirinya sendiri.

beban

Anda dapat memuat model terkait ForeignKey dengan memanggil metode beban ().

Load () dapat digunakan untuk me-refresh model dari database jika telah diubah oleh proses lain.

!!!Tip Baca lebih lanjut tentang metode beban () dalam metode model

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.

mendapatkan

Prinsip kerjanya persis sama dengan fungsi get di atas, tetapi memungkinkan Anda untuk mengambil objek terkait dari ujung hubungan yang lain.

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

Dapatkan atau tidak sama sekali

Ini persis sama dengan yang dijelaskan di atas, tetapi jika tidak ada catatan database yang cocok dengan kriteria yang ditemukan, Tidak ada yang dikembalikan alih-alih pengecualian yang dilemparkan.

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

Memperoleh atau membuat

Sama persis dengan fungsi get\ _ atau\ _ di atas, tetapi memungkinkan Anda untuk menanyakan atau membuat objek terkait dari ujung hubungan yang lain.

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

pertama

Ini identik dengan fungsi pertama di atas, tetapi memungkinkan Anda untuk menanyakan objek terkait dari ujung hubungan yang lain.

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

semuanya

Fungsionalitas yang sama seperti semua hal di atas, tetapi memungkinkan Anda untuk menanyakan objek terkait dari ujung hubungan yang lain.

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