Flask and Databases
Pendahuluan
Halo Mahasiswa Stupenss, selamat datang kembali di sesi pembelajaran Flask! Pada materi kali ini, kita akan membahas topik yang sangat penting dalam pengembangan aplikasi web yaitu Flask Database menggunakan SQLAlchemy. Materi ini merupakan kelanjutan dari pembahasan sebelumnya tentang Template dan Form yang telah kita pelajari. Dengan mempelajari Flask Database menggunakan SQLAlchemy, kamu akan memahami bagaimana cara membuat dan mengelola database pada aplikasi Flask yang kamu buat. Mari kita mulai pembelajaran ini dan temukan bagaimana Flask Database menggunakan SQLAlchemy dapat membantu kamu dalam mengembangkan aplikasi web yang lebih dinamis dan interaktif!
Coba Stupenss, bayangkan kamu sebagai seorang pengembang aplikasi web yang ingin menghubungkan aplikasi dengan database relasional seperti MySQL atau PostgreSQL. Kamu pasti tahu bahwa untuk melakukan interaksi dengan database, kamu harus menulis kode SQL yang cukup kompleks, terutama jika kamu ingin melakukan operasi- operasi seperti pengambilan data, pembaruan data, atau penghapusan data. Nah, itulah sebabnya SQLAlchemy hadir untuk membantumu mengatasi masalah ini.
Dengan menggunakan SQLAlchemy, kamu tidak perlu lagi menulis kode SQL yang rumit. Sebaliknya, kamu dapat menggunakan sintaks Python yang lebih familiar dan mudah dipahami. SQLAlchemy akan mengubah sintaks Python ke dalam bahasa SQL yang dapat dipahami oleh database relasional yang kamu gunakan.
Dengan begitu, kamu dapat melakukan operasi- operasi pada database dengan lebih mudah dan efisien, tanpa harus khawatir dengan perbedaan-perbedaan detail dari masing-masing jenis database.
Tidak hanya itu, SQLAlchemy juga memungkinkan kamu untuk memetakan data yang disimpan di dalam database ke dalam objek Python dan sebaliknya, sehingga mempermudah pengelolaan data di dalam aplikasi Flask. Dengan demikian, kamu dapat memanfaatkan kekuatan Python untuk mengelola data, seperti melakukan operasi matematis atau transformasi data, yang mungkin sulit dilakukan dengan SQL.
Jadi, bisa kita katakan bahwa SQLAlchemy adalah seperti penerjemah antara Python dan database relasional. Dengan bantuan SQLAlchemy, kamu dapat berkomunikasi dengan database menggunakan bahasa Python yang lebih mudah dipahami dan kamu juga dapat memanfaatkan kekuatan Python untuk mengelola data di dalam aplikasi Flaskmu. Keren, bukan?
Nah stupenss pada materi kali ini kita akan mencoba belajar untuk membuat aplikasi Todo List sederhana menggunakan flask dan SQLAlchemy, jadi yuk kita mulai dari tahap pertama!
1. Instalasi SQLalchemy
Pertama-tama, pastikan Kamu telah menginstall SQLAlchemy pada virtual environment. Kamu dapat melakukannya dengan menjalankan perintah pip install SQLAlchemy pada terminal atau command prompt, eits..!! sebelum melakukan perintah install pastikan kamu sudah mengaktifkan virtual environment kamu ya.
Install SQLAlchemy
2. Konfigurasi Koneksi Database
Setelah menginstal SQLAlchemy kedalam virtual environment, selanjutnya kamu dapat melakukan konfigurasi database nih stupenss. SQLAlchemy mendukung banyak jenis database seperti MySQL, PostgreSQL, SQLite, dan masih banyak lagi. Untuk melakukan konfigurasi koneksi database, kamu perlu mengisi beberapa parameter seperti nama database, alamat server, username, dan password. Berikut adalah contoh konfigurasi koneksi database untuk MySQL:
from sqlalchemy import create_engine
# konfigurasi koneksi database
db_uri = "mysql+mysqlconnector://root:@localhost/todo"
engine = create_engine(db_uri)
3. Membuat model
Setelah melakukan konfigurasi koneksi database, selanjutnya kita perlu membuat model atau representasi objek dari tabel di dalam database. Model ini akan menjadi objek yang akan kita gunakan untuk melakukan operasi pada tabel di dalam database. Berikut adalah contoh membuat model pada SQLAlchemy:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
import datetime as dt
# Model database todo
Base = declarative_base()
class TodoModel(Base):
__tablename__ = 'todo'
id = Column(Integer, primary_key=True)
todo = Column(String(50))
status = Column(String(50))
crate_at = Column(String(50), default=dt.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
def __repr__(self):
return "<TodoModel(todo='%s', status='%s', crate_at='%s')>" % (
self.todo, self.status, self.crate_at)
# Membuat tabel
Base.metadata.create_all(engine)
Pada contoh diatas, kita membuat model TodoModel yang merepresentasikan tabel todo di dalam database. Kita menggunakan SQLAlchemy ORM (Object-Relational Mapping) untuk memetakan tabel todo menjadi sebuah kelas Python bernama TodoModel. Kita mendefinisikan atribut id, todo, status, dan create_at pada kelas TodoModel yang merepresentasikan kolom di dalam tabel todo.
4. Membuat Session
Setelah membuat model, selanjutnya kita perlu membuat session atau sesi yang memungkinkan kita untuk melakukan operasi pada tabel di dalam database. Session ini akan menjadi jembatan antara aplikasi Flask kita dengan database. Berikut adalah contoh membuat session pada SQLAlchemy:
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
Pada contoh di atas, kita membuat objek session menggunakan sessionmaker yang terhubung dengan objek engine yang telah kita buat sebelumnya. Objek session ini nantinya akan kita gunakan untuk melakukan operasi CRUD pada tabel di dalam database.
5. Melakukan operasi CRUD
Setelah membuat session, kita dapat mulai melakukan operasi CRUD pada tabel di dalam database. Berikut adalah contoh melakukan operasi CRUD pada SQLAlchemy:
from flask import Flask, redirect,render_template,request
#App
app = Flask(__name__)
# menampilkan data
@app.route("/" , methods=['GET'])
def index():
# mengambil data dari database
todo_list = ({
'id': todo.id,
'todo': todo.todo,
'status': todo.status,
'crate_at': todo.crate_at
} for todo in session.query(TodoModel).all())
return render_template("index.html", todo_list=todo_list)
# menambah data data
@app.route('/add', methods=['POST'])
def add():
todo = request.form['todo']
status = False
todo_data = TodoModel(todo=todo, status=status)
session.add(todo_data)
session.commit()
return redirect('/')
# mengubah status data
@app.route('/delete/<int:id>')
def delete(id):
todo = session.query(TodoModel).filter_by(id=id).first()
todo.status = True
session.commit()
return redirect('/')
if __name__ == "__main__":
app.run(debug=True)
Pada contoh diatas, kita membuat sebuah aplikasi Flash sederhana yang dapat melakukan operasi CRUD pada tabel users di dalam database PostgreSQL. Aplikasi ini memiliki empat endpoint yaitu:
1. /add untuk menambah data user ke dalam database.
2. / untuk menampilkan seluruh data user yang ada di dalam database.
3. /delete/<int:user_id> untuk menghapus data user berdasarkan id dengan mengubah status pada database.
6. Membuat template
Kemudian pada tahap akhir kita akan membuat template untuk menampilkan data yang ada pada database sehingga data dapat dibaca dengan jelas, untuk contoh templatenya seperti ini ya stupenss, namun kamu dapat memodifikasinya sendiri ya
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Todo List</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous"> </head>
<body class="p-5 m-0 border-0 bd-example">
<div class="container">
<div class="row">
<div class="col-md-6 mx-auto">
<!-- Form Input -->
<div class="card text-center">
<div class="card-header">My Todo List</div>
<div class="card-body">
<form action="{{url_for('add')}}" method="post">
<input class="form-control" name="todo" type="text" placeholder="My Todo"
aria-label=".form-control-lg example" />
<button type="submit" class="btn btn-primary mt-3">Submit</button>
</form>
</div>
<div class="card-footer text-body-secondary"></div>
</div>
<!-- End Form Input -->
<!-- List Todo -->
<div class="card mt-4">
<div class="card-header">To-Do List</div>
<!-- tampilkan data dari Model -->
<ul class="list-group list-group-flush">
{% for item in todo_list if item.status|int == 0 %}
<li class="list-group-item">
<p>{{item.todo}}</p>
<a href="{{url_for('delete', id=item.id)}}">
<button type="submit" class="btn btn-danger">Selesai</button>
</a>
</li>
{% endfor %}
</ul>
</div>
<!-- End List Todo -->
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe"
crossorigin="anonymous"></script>
</body>
</html>
✨ Hore Stupenss! kamu telah belajar membuat to do list sederhana dengan mengimplementasikan ORM SQLAlchemy pada Flask Programing, semoga materi yang disampaikan dapat dipahami ya,
jika ada kesulitan silahkan bertanya ya, jangan lupa untuk mengerjakan quiz dan di bawah juga ada referensi yang dapat kamu gunakan untuk mendalami materi! Semangat belajar Stupenss.
Quiz
1. Apa itu SQLAlchemy?
a. Sebuah bahasa pemrograman
b. Sebuah framework untuk membuat aplikasi web dengan Python
c. Sebuah package untuk menghubungkan Python dengan database relasional
d. Sebuah server web open source
2. Apa perbedaan antara SQLAlchemy Core dan SQLAlchemy ORM?
a. SQLAlchemy Core hanya mendukung kueri SQL sederhana, sedangkan SQLAlchemy ORM mendukung ORM untuk melakukan mapping objek ke database.
b. SQLAlchemy Core hanya mendukung ORM untuk melakukan mapping objek ke database, sedangkan SQLAlchemy ORM mendukung kueri SQL sederhana.
c. SQLAlchemy Core dan SQLAlchemy ORM sama-sama mendukung kueri SQL sederhana dan ORM untuk melakukan mapping objek ke database.
d. SQLAlchemy Core dan SQLAlchemy ORM sama-sama tidak mendukung kueri SQL dan ORM.
3. Apa keuntungan menggunakan SQLAlchemy ORM?
a. Lebih mudah dalam menulis kueri SQL kompleks.
b. Lebih efisien dalam melakukan kueri ke database.
c. Memiliki keamanan yang lebih baik karena tidak perlu menuliskan query SQL langsung.
d. Lebih mudah dalam mengimplementasikan fitur-fitur baru seperti pagination atau sorting.
4. Bagaimana cara menghubungkan Flash dengan database menggunakan SQLAlchemy?
a. Dengan melakukan koneksi ke database secara langsung menggunakan package DB-API.
b. Dengan membuat instance engine dari package SQLAlchemy dan melakukan binding ke session.
c. Dengan membuat instance session dari package SQLAlchemy dan melakukan binding ke engine.
d. Dengan melakukan koneksi ke database menggunakan package PyMySQL.
5. Bagaimana cara melakukan operasi CRUD pada SQLAlchemy dengan Flask?
a. Menggunakan package Flask-SQLAlchemy.
b. Menggunakan package Flask-Admin.
c. Menggunakan package Flask-WTF.
d. Menggunakan package Flask-Script.
Referensi
https://codepolitan.com/blog/menjadi-developer-web-dengan-python-dan-flask-database-5a601bca6febd https://www.sqlalchemy.org/
https://python-adv-web-apps.readthedocs.io/en/latest/flask_db1.html#setup-flask-sqlalchemy https://flask-sqlalchemy.palletsprojects.com/en/3.0.x/
https://towardsdatascience.com/sqlalchemy-python-tutorial-79a577141a91h