1.5.6.5 Query Data - dvrg/flask-web-development GitHub Wiki

Flask-SQLAlchemy bisa memperlihatkan semua data pada database dengan metode all() flask shell

>>> Role.query.all()
[<Role Administrator’>, <Role User>]
>>> User.query.all()
[<User david>, <User teguh>, <User sabil>]

Flask-SQLAlchemy juga bisa memperlihatkan semua data pada database dengan mem-filter data pada database dengan filter_by():

>>> User.query.filter_by(role=user_role).all()
[<User teguh>, <User sabil>]

Kamu juga bisa untuk mengecek query SQL yang dihasilkan SQLALchemy:

>>> str(User.query.filter_by(role=user_role))
'SELECT users.id AS users_id, users.username AS users_username, users.role_id AS users_role_id \nFROM users \nWHERE %(param_1)s 
= users.role_id'

Jika kamu keluar dari flask-shell maka objek-objek yang sebelumnya akan hilang selain yang sudah di commit. Data yang sudah dicommit akan tersimpan di database. Jika kamu membuka shell baru maka kamu kamu harus import ulang dari app. Nah, jika kamu ingin mengambil data pertama dari database maka gunakan metode first():

>>> user_role = Role.query.filter_by(name='User').first()

metode first() mengambil data pertama dari id tabel Role.

Beberapa perintah query filters:

Option Deksripsi
filter() Memfilter sesuai
filter_by() Memfilter dengan nilai kesamaan
limit() Membatasi jumlah hasil query
offset() Menerapkan offset ke hasil query
order_by() Mengurutkan data sesuai dengan nilai yang diberikan
group_by() Mengelompokkan hasil data sesuai dengan nilai yang diberikan

Beberapa perintah query SQLAlchemy:

Option Deskripsi
all() Mengeluarkan seluruh data
first() Mengeluarkan data pertama
first_or_404() Mengelurakan data pertama, namun jika data tidak ada akan mengirim 404 sebagai respon
get() Mengembalikan data sesuai id yang diberikan
get_or_404() Mengembailkan data sesuai id yang diberikan, namun jika data tidak ada akan mengirim 404 sebagai respon
count() Menghitung data
paginate() Membuat paginate sesuai range

SQLAlchemy relationship mirip dengan query. Contoh hubungan one-to-many antara role dan user:

>>> users = user_role.users
>>> users
[<User teguh>, <User sabil>]
>>> users[0].role
<Role User>

lazy='dynamic' berfungsi untuk query tidak dieksekusi secara otomatis:

# app.py
...
# Model
class Role(db.Model):
    __tablename__ = 'roles'
    ...
    users = db.relationship('User', backref='role', lazy='dynamic')

...

dengan relasi seperti ini, jadi filter bisa ditambahkan, tapi sebelum menjalankan perintah di bawah pastikan kamu reload flask shell kamu:

>>> user_role.users.order_by(User.username).all()
[<User david>, <User susan>]
>>> user_role.users.count()
2
⚠️ **GitHub.com Fallback** ⚠️