Lewati ke isi

Parameter umum

Semua jenis bidang memiliki seperangkat parameter yang umum.

kunci utama

Primer\ _ key: bool = Salah - > Default itu Salah.

Atur kolom kunci utama di atas meja sehingga kunci asing selalu mengacu pada pk model.

Ini hanya digunakan dalam SQL.

kenaikan otomatis

Autoincrement: bool = Primary\ _ key dan type = = int - > Default True jika kolom adalah kunci primer dan jenisnya adalah Integer, False sebaliknya.

Ini hanya dapat digunakan dengan bidang int / bigint.

Jika sebuah bidang memiliki kenaikan otomatis, itu menjadi opsional.

Digunakan dalam SQL dan Pydantic (mengubah bidang PK ke bidang opsional untuk kenaikan otomatis).

Bisa kosong

Nullable: bool = False - > Default to False untuk semua bidang kecuali bidang relasional.

Jika pengguna menyediakan salah satu dari berikut ini, secara otomatis diubah menjadi Benar:

  • Berikan nilai atau fungsi default
  • Menyediakan server\ _ nilai atau fungsi default
  • Atur kenaikan otomatis pada bidang kunci\ _ Integerprimary

Menentukan apakah suatu bidang bersifat opsional atau diperlukan, digunakan dengan SQL dan Pydantic.

Pengaturan default digunakan untuk pydantic dan sqlalchemy, karena ini adalah pengaturan yang paling umum:

  • Nullable = Salah - menunjukkan bahwa kolom database tidak kosong dan bidang diperlukan dalam pydantic
  • Nullable = Benar - menunjukkan bahwa kolom database kosong dan bidang opsional dalam pydantic

Jika Anda ingin mengatur pengaturan yang berbeda untuk pydantic dan database, lihat sql\ _ nullable di bawah ini.

!!!Perhatikan bahwa secara default, semua kunci asing juga dapat batal, yang berarti tidak ada model terkait yang diperlukan.

1
Jika Anda mengubah kolom `ForeignKey` menjadi `nullable=False`, itu menjadi diperlukan.

SQL\ _ nullable

SQL\ _ nullable: bool = nullable - > default ke nilai nullable (seperti yang dijelaskan di atas).

Menentukan apakah bidang tersebut tidak nol atau hanya nol yang diperbolehkan dalam database.

Gunakan pengaturan ini dalam kombinasi dengan nullable hanya jika Anda ingin mengatur opsi yang berbeda dalam model Pydantic dan database.

Contoh penggunaan mungkin untuk membuat bidang dalam database tidak dapat dibatalkan, tetapi membiarkannya batal dalam pydantic (yaitu menggunakan nilai default server\ _). Ini akan mencegah bidang diperbarui ke nol (seperti pengaturan server\ _ default, Anda tidak dapat memasukkan nilai nol karena nilai default akan digunakan)

default

Default: Any = None - > Default is None.

Jika tidak ada nilai lain yang dilewatkan, nilai default digunakan.

Dalam SQL disebut pada waktu insert, digunakan selama definisi model Pydantic.

Jika bidang memiliki nilai default, itu menjadi opsional.

Anda dapat melewati nilai statis atau panggilan (fungsi, dll.)

Ini digunakan dalam SQL dan Pydantic.

Contoh penggunaan:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# perhatikan perbedaan antara mengoper nilai dan penunjuk yang Dapat Disebut

# nilai
Nama: str = ormar. String (max _ length = 200, default = "Nama")

# perhatikan bahwa ketika Anda memanggil fungsi itu bukan penunjuk untuk Disebut
# definisi seperti ini akan menyebut fungsi saat startup dan menetapkan
# hasil fungsi ke default, jadi itu akan menjadi nilai konstan untuk semua contoh
Dibuat _ tanggal: datetime.datetime = ormar. DateTime (default = datetime.datetime.now ())

# jika Anda ingin melewati referensi yang Dapat Disebut (perhatikan bahwa ia tidak dapat memiliki argumen)
# perhatikan kurangnya tanda kurung - > ormar akan memanggil fungsi ini untuk Anda di setiap model
Dibuat _ tanggal: datetime.datetime = ormar. DateTime (default = datetime.datetime.now)

# Dipanggil bisa berupa fungsi, builtin, kelas dll.

default server

Server\ _ default: Any = Tidak ada - > Default adalah Tidak Ada.

Jika tidak ada nilai lain yang dilewatkan, nilai default digunakan.

Dalam SQL disebut di sisi server, sehingga Anda dapat lulus fungsi IE SQL seperti sekarang () atau kueri / nilai dibungkus dalam teks sqlalchemy () klausa.

Jika bidang memiliki nilai default server\ _, itu menjadi opsional.

Anda dapat melewati nilai statis atau panggilan (fungsi, dll.)

Ini hanya digunakan dalam SQL.

Contoh penggunaan:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
from datetime import datetime

import databases
import ormar
import sqlalchemy
from sqlalchemy import func, text

database = databases.Database("sqlite:///test.db")
metadata = sqlalchemy.MetaData()


class Product(ormar.Model):

    ormar_config = ormar.OrmarConfig(
        database=database, metadata=metadata, tablename="product"
    )

    id: int = ormar.Integer(primary_key=True)
    name: str = ormar.String(max_length=100)
    company: str = ormar.String(max_length=200, server_default="Acme")
    sort_order: int = ormar.Integer(server_default=text("10"))
    created: datetime = ormar.DateTime(server_default=func.now())

Server peringatan!!! \ _ default menerima str,sqlalchemy.sql.elements.ClauseElement, atau sqlalchemy.sql.elements.TextClause, jadi jika Anda ingin mengatur nilai integer ie, Anda perlu membungkusnya dalam fungsi sqlalchemy.text (), seperti yang ditunjukkan di atas

!!!Tip Anda juga dapat melewati SQL yang valid (spesifik dialek) yang terkandung dalam sqlalchemy.text ()

1
Misalnya `func.now()` di atas dapat ditukar dengan `text('(CURRENT_TIMESTAMP)')` dengan sqlite backend

!!!info server\ _ default diteruskan langsung ke definisi tabel sqlalchemy, sehingga Anda dapat membaca lebih lanjut di dokumentasi sqlalchemy default server

nama

Nama: str = Tidak ada - > Tidak Ada Default

Memungkinkan Anda menentukan nama kolom alias yang akan digunakan.

Ini berguna untuk struktur database yang ada yang menggunakan kata kunci yang dicadangkan, atau jika Anda ingin menggunakan nama database yang berbeda dari nama bidang ormar.

Ambil cuplikan kode berikut sebagai contoh.

Dari, sebagai kata yang dicadangkan dalam Python, akan mencegah Anda membuat model dengan nama kolom tersebut.

Mengubah nama model menjadi dari\ _ dan menambahkan nama parameter = 'dari' akan menyebabkan ormar digunakan dari sebagai nama kolom database.

1
2
 #... sisa Model dipotong untuk singkatnya
 dari _: str = ormar. String (max _ length = 15, name = 'from')

Demikian juga, Anda dapat mengubah nama kolom kunci asing di database sambil mempertahankan nama relasional yang diinginkan di ormar:

1
2
 #... sisa Model dipotong untuk singkatnya
Album: Opsional [Album] = ormar. ForeignKey (Album, nama = "album _ id")

indeks

Indeks: bool = Salah - > Default itu Salah,

Mengatur indeks kolom tabel.

Ini hanya digunakan dalam SQL.

unik

Unik: bool = Salah

Menetapkan batasan unik pada kolom meja.

Ini hanya digunakan dalam SQL.

Tipe overlay\ _ pydantic

Secara default, Ormar menggunakan tipe bidang Pydantic yang telah ditentukan, yang diterapkan pada pembuatan model (jadi petunjuk jenisnya adalah opsional).

Jika mau, Anda dapat menerapkan tipe Anda sendiri, yang akan sepenuhnya menggantikan tipe bawaan. Oleh karena itu, sebagai pengguna, Anda bertanggung jawab untuk menyediakan tipe yang valid dalam konteks tipe medan ormar tertentu.

Peringatan: Secara default, Anda harus menggunakan parameter built-in yang diteruskan ke bidang Pydantic yang mendasarinya.

1
Anda dapat memeriksa argumen apa yang didukung di bagian tipe lapangan atau di [Pirang](https://pydantic-docs.helpmanual.io/usage/schema/#field-customisation) Dokter.

!!!Berbahaya, mengatur jenis bidang pydantic yang salah dapat merusak model Anda, jadi hanya menimpanya jika Anda tahu apa yang Anda lakukan.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
Karena mudah untuk mematahkan fungsionalitas ormar, argumen `overwrite_pydantic_type` tidak tersedia di bidang relasi!


base _ ormar _ config = ormar. OrmarConfig (
    Metadata = metadata
    Basis data = basis data
)


# contoh menimpa
Kelas OverwriteTest (ormar. Model):
    ormar _ config = base _ ormar _ config (tablename = "menimpa")

    Id: int = ormar. Integer (primary _ key = Benar)
    my _ int: str = ormar. Integer (menimpa _ pydantic _ type = PositiveInt)
    kendala _ dict: Json = ormar. JSON (
        menimpa _ pydantic _ type = Opsional [Json [Dict [str, int]]])