Skip to content

1.5.5 Relasi Database

David Rigan edited this page Feb 13, 2020 · 1 revision

Database relasional membuat koneksi antara baris dalam tabel yang berbeda. Pada app.py tambahkan kode berikut ini:

# app.py: menambahkan relasi
class Role(db.Model):
    ...
    users = db.relationship('User', backref='role')

class User(db.Model):
    ...
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id')

...

Ini adalah hubungan satu-ke-banyak dari role ke user, karena satu role dapat memiliki banyak user, tetapi setiap user hanya dapat memiliki satu peran. Hubungan antara dua tabel tersebut dihubungkan oleh foreign key. Kolom role_id yang ditambahkan ke User didefinisikan sebagai foreign key.

Nama Deskripsi
backref Mengembalikkan referensi dalam model yang berhubungan
primaryjoin Menentukan kondisi antara kedua model secara eksplisit. Ini diperlukan hanya untuk hubungan yang ambigu.
lazy Tentukan bagaimana item terkait dimuat. Nilai yang mungkin dipilih (item dimuat menuntut saat pertama kali diakses), langsung (item dimuat ketika objek sumber adalah dimuat), bergabung (item dimuat segera, tetapi sebagai gabungan), subquery (item dimuat segera, tetapi sebagai subquery), noload (item tidak pernah dimuat), dan dinamis (bukan memuat item, kueri yang dapat memuatnya diberikan).
uselist Jika disetel ke False, gunakan skalar dari pada List.
order_by Menentukan urutan list dalam model
secondary Menentukan tabel asosiasi untuk hubungan banyak ke banyak
secondaryjoin Menentukan tabel asosiasi untuk hubungan banyak ke banyak saat SQLAlchemy tidak dapat menentukan dirinya sendiri

Ada jenis hubungan lain selain satu ke banyak. Hubungan one-to-many dapat diekspresikan dengan cara yang sama dengan hubungan satu-ke-banyak. Hubungan many-to-one juga dapat dinyatakan sebagai hubungan satu-ke-banyak jika tabel dibalik, atau dapat diekspresikan dengan kunci asing dan definisi db.relationship() baik pada sisi "banyak". Itu tipe hubungan paling kompleks, many-to-many, memerlukan tabel tambahan yang disebut asosiasi.

Clone this wiki locally