Aplikasi Create, Read, Update, Detele (CRUD) adalah aplikasi standar yang pasti ada jika kita ingin membuat aplikasi web dinamis. Dengan fungsi CRUD kita dapat melakukan manipulasi data di dalam database melalui aplikasi yang dibuat. Pada artikel kali ini kita akan belajar bagaimana membuat aplikasi CRUD dengan menggunakan Python dengan database yang dipakai adalah MySQL.
Sampai saat ini untuk di indonesia python bukanlah bahasa pemrograman yang populer untuk membuat aplikasi web, kebanyakan dari kita lebih memilih PHP karena lebih mudah dan mempunyai dokumentasi yang banyak. Namun jangan salah di luar negeri trends bahasa python sudah sangat tinggi bahkan lebih tinggi trendnya jika dibandingkan dengan PHP. Buat teman-teman yang ingin benar-benar serius belajar Python kelasprogrammer.com sudah membahasa materi-materi dasar mengenai python, kalian bisa belajar untuk meningkatkan skil dan wawasan dalam dunia web development.
Untuk membuat aplikasi web CRUD di python kalian perlu menyiapkan beberapa hal seperti:
- Server Database MySQL
- Modul PyMySQL
- Flask
- Bootstrap
Untuk pembahasan masing-masing komponen tersebut , simak pembahasan dibawah ini:
Daftar Isi
Siapkan Database
Buat database dengan nama db_penjualan.
create database db_penjualan;
Setelah itu buat tabel barang di dalam database db_penjualan
create table barang (
id_barang int not null auto_increment primary key,
nama_barang varchar(20) not null,
harga int,
stok int
);
Baca juga : Cara membuat database mysql
Apa itu PIP
Pip merupakan program manejer paket yang ada di python digunakan untuk menginstall modul yang kita butuhkan dalam hal ini adalah Flask dan PyMySQL.
Apa itu PyMySQL
PyMySQL merupakan salah satu interface atau modul yang tersedia di dalam python, library ini berfungsi untuk menghubungkan ke server database mysql dengan menggunakan python. Requirements yang dibutuhkan untuk menggunakan interface ini adalah kita sudah menggunakan pythonn dengan versi >=2.7 atau 3.5 dan database mysql server dengan versi diatas 5.5.
Menginstal Modul PyMySQL
Untuk menginstall modul PyMySQL sangatlah mudah, kita hanya perlu menginstall lewat program pip. Langkah-langkahnya seperti berikut:
Buka Command Prompt dan ketikan perintah:
python -m pip install PyMySQL
Atau bisa juga
pip install PyMySQL

Jika berhasil output yang di hasilkan seperti pada screenshot di atas.
Apai itu Flask?
Flask adalah kerangka kerja aplikasi web (web framework) yang bersifat micro, istilah ini dipakai karena flask menyediakan pustaka atau alat bantu inti yang digunakan untuk proses membangun sebuah aplikasi web, jadi istilah micro ini bukan berarti bahwa mengembangkan aplikasi web dengan flask hanya dilakukan dalam skala kecil. Apabila ada kebutuhan lain yang dibutuhkan, flask mengizinkan kita untuk menambah fitur lain yang spesifik sebagai ekstensi.
Cara Menginstal Flask
Kita bisa menginstal flask melalui program pip. Berikut ini adalah cara menginstal flask di pyhton:
- Buka command prompt (cmd)
- Ketik pip install flask

- Tekan enter dan proses instalasi akan berjalan, tunggu hingga selesai dengan output ‘succsessfully installed flask-1.1.2′
- Untuk mengecek apakah flask sudah benar-benar berhasil di instal coba masuk ke dalam IDLE (python shell) dengan cara ketik python untuk masuk ke program python interpreter setelah masuk yang ditandai dengantanda >>> ketik perintah import flask

Jika tidak ada pesan error itu berarti Flask sudah terpasang dengan benar dan siap untuk digunakan.
Membuat Aplikasi CRUD Python dengan MySQL
Langkah pertama kalian buat sebuah folder project dalam di rektori komputer kalian, terserah kalian bisa menempatkan di direktori manapun.
Sebagai contoh disini saya membuat folder crud di dalalam sub foder web_python.
D:\web_python\crud
Buat file app.py
Setelah itu buat file app.py menggunakan teks editor. File ini berfungsi sebagai objek aplikasi (kalo di dalam framework lain bisa kita sebut sebagai controller).
from flask import Flask, render_template, \
request, redirect, url_for
import pymysql.cursors, os
application = Flask(__name__)
conn = cursor = None
#fungsi koneksi database
def openDb():
global conn, cursor
conn = pymysql.connect("localhost","root","","db_penjualan" )
cursor = conn.cursor()
#fungsi untuk menutup koneksi
def closeDb():
global conn, cursor
cursor.close()
conn.close()
#fungsi view index() untuk menampilkan data dari database
@application.route('/')
def index():
openDb()
container = []
sql = "SELECT * FROM barang"
cursor.execute(sql)
results = cursor.fetchall()
for data in results:
container.append(data)
closeDb()
return render_template('index.html', container=container,)
#fungsi view tambah() untuk membuat form tambah
@application.route('/tambah', methods=['GET','POST'])
def tambah():
if request.method == 'POST':
nama = request.form['nama']
harga = request.form['harga']
stok = request.form['stok']
openDb()
sql = "INSERT INTO barang (nama_barang, harga,stok) VALUES (%s, %s, %s)"
val = (nama, harga, stok)
cursor.execute(sql, val)
conn.commit()
closeDb()
return redirect(url_for('index'))
else:
return render_template('tambah.html')
#fungsi view edit() untuk form edit
@application.route('/edit/<id_barang>', methods=['GET','POST'])
def edit(id_barang):
openDb()
cursor.execute('SELECT * FROM barang WHERE id_barang=%s', (id_barang))
data = cursor.fetchone()
if request.method == 'POST':
id_barang = request.form['id_barang']
nama = request.form['nama']
harga = request.form['harga']
stok = request.form['stok']
sql = "UPDATE barang SET nama_barang=%s, harga=%s, stok=%s WHERE id_barang=%s"
val = (nama, harga, stok, id_barang)
cursor.execute(sql, val)
conn.commit()
closeDb()
return redirect(url_for('index'))
else:
closeDb()
return render_template('edit.html', data=data)
#fungsi untuk menghapus data
@application.route('/hapus/<id_barang>', methods=['GET','POST'])
def hapus(id_barang):
openDb()
cursor.execute('DELETE FROM barang WHERE id_barang=%s', (id_barang,))
conn.commit()
closeDb()
return redirect(url_for('index'))
if __name__ == '__main__':
application.run(debug=True)
File app.py adalah file yang menjadi file utama atau bisa kita sebut sebagai controllernya. Dimana file ini sebagai objek aplikasi yang menghubungkan antara template melalui fungsi view() dengan data yang kita ambil dari database MySQL.
Membuat Template
Pada tahap ini kita akan membuat template untuk menampilkan interface aplikasi kepada pengguna. ada 3 template yang akan kita buat yaitu index.html, tambah.html dan edit.html.
Langkah awal kalian harus buat dulu folder templates untuk menyimpan semua file template di dalam satu folder.

1. index.html
Template index.html berfungsi sebagai halama awal untuk menampilkan daftar barang dari database.
Buatlah file index.html menggunakan teks editor, kode nya seperti di bawah ini:
<!-- Code by Kelas Programmer
Author: Setiawan Dimas Arimurti
Author URL: https://kelasprogrammer.com
License: Creative Commons Atribusi-NonKomersial 4.0 Internasional
License URL: http://creativecommons.org/licenses/by-nc/4.0/
-->
<html>
<head>
<title>Aplikasi CRUD python Menggunakan Flask | Kelasprogrammer.com </title>
<link rel="stylesheet" href="{{ url_for('static', filename='bootstrap/css/bootstrap.min.css') }}">
</head>
<body>
<div class="container">
<h2>Aplikasi CRUD python Menggunakan Flask</h2>
<table class="table table-bordered table-hover">
<thead>
<tr>
<th>ID Barang</th>
<th>Nama Barang</th>
<th>Harga</th>
<th>Stok</th>
<th width="10%" colspan="2">Aksi</th>
</tr>
</thead>
<tbody>
{% for row in container %}
<tr>
<td>{{ row[0] }}</td>
<td>{{ row[1] }}</td>
<td>{{ row[2] }}</td>
<td>{{ row[3] }}</td>
<td><a href="http://localhost:5000/edit/{{row[0]}}" class="btn btn-warning" role="button">Ubah</a></td>
<td><a href="http://localhost:5000/hapus/{{row[0]}}" class="btn btn-danger" role="button">Hapus</a></td>
</tr>
{% endfor %}
</tbody>
</table>
<a href="http://localhost:5000/tambah" class="btn btn-primary" role="button">Tambah Data</a>
</div>
</body>
</html>
2. tambah.html
Template yang kedua adalah tambah.html yang akan berfungsi sebagai from input tambah data ke database. Lakukan cara yang sama seperti langkah sebelumnya.
<!-- Code by Kelas Programmer
Author: Setiawan Dimas Arimurti
Author URL: https://kelasprogrammer.com
License: Creative Commons Atribusi-NonKomersial 4.0 Internasional
License URL: http://creativecommons.org/licenses/by-nc/4.0/
-->
<html>
<head>
<title>Aplikasi CRUD python Menggunakan Flask | Kelasprogrammer.com </title>
<link rel="stylesheet" href="{{ url_for('static', filename='bootstrap/css/bootstrap.min.css') }}">
</head>
<body>
<div class="container">
<div class="col-sm-5">
<h2>Tambah Data Barang</h2>
<form action="{{ url_for('tambah') }}" method="post">
<div class="form-group">
<label>Nama Barang:</label>
<input type="text" name="nama" class="form-control" placeholder="Masukan nama barang" required />
</div>
<div class="form-group">
<label>Harga:</label>
<input type="number" name="harga" class="form-control" placeholder="Masukan harga" required />
</div>
<div class="form-group">
<label>Stok:</label>
<input type="number" name="stok" class="form-control" placeholder="Masukan stok" required />
</div>
<button type="submit" id="Submit" name="submit" class="btn btn-primary">Tambah Barang</button>
</form>
</div>
</div>
</body>
</html>
3. edit.html
Pada template yang ketiga kita membuat edit.html yang berfungsi untuk menampilkan form edit data.
<!-- Code by Kelas Programmer
Author: Setiawan Dimas Arimurti
Author URL: https://kelasprogrammer.com
License: Creative Commons Atribusi-NonKomersial 4.0 Internasional
License URL: http://creativecommons.org/licenses/by-nc/4.0/
-->
<html>
<head>
<title>Aplikasi CRUD python Menggunakan Flask | Kelasprogrammer.com </title>
<link rel="stylesheet" href="{{ url_for('static', filename='bootstrap/css/bootstrap.min.css') }}">
</head>
<body>
<div class="container">
<div class="col-sm-5">
<h2>Ubah Data Barang</h2>
<form action="url_for('edit', id_barang={{data[0]}})" method="post">
<div class="form-group">
<input type="hidden" name="id_barang" value="{{data[0]}}" class="form-control" />
</div>
<div class="form-group">
<label>Nama Barang:</label>
<input type="text" name="nama" value="{{data[1]}}" class="form-control" placeholder="Masukan nama barang" required />
</div>
<div class="form-group">
<label>Harga:</label>
<input type="number" name="harga" value="{{data[2]}}" class="form-control" placeholder="Masukan harga" required />
</div>
<div class="form-group">
<label>Stok:</label>
<input type="number" name="stok" value="{{data[3]}}" class="form-control" placeholder="Masukan stok" required />
</div>
<button type="submit" id="Submit" name="submit" class="btn btn-primary">Edit Barang</button>
</form>
</div>
</div>
</body>
</html>
Kita tidak membuat fungsi view() hapus karena sudah langsung kita definisikan dari objek aplikasi (lihat pada file app.py).
Konfigurasi Bootstrap
Jika kalian perhatikan pada setiap file template kita menggunakan bootstrap yang di panggil dari tag <head> pada setiap template.
Agar dapat menggunakan bootstrap, silahkan kalian download dulu ya di website nya.
Setelah kalian berhasil mendownload, selanjutnya buatlah folder static lalu simpan file bootstrap di dalam folder tersebut.

Menjalankan Aplikasi
Untuk menjalankan aplikasi kita menggunakan command prompt dengan cara arahkan direktori ke folder project yang kita buat lalu jalankan objek aplikasi menggunakan perintah
python app.py

Aplikasi akan di jalankan lewat server http://localhost:5000/ atau pada alamat yang tertera di layar saat aplikasi running.



Kesimpulan
Dengan demikian kita telah berhasil membuat aplikasi web di python dengan mengimplementasi flask sebagai web framewrok dan database mysql untuk membuat aplikasi CRUD sederhana ini, kalian tentunya bisa mengembangkan lebih jauh dari apa yang saya bahas disini.
Dodwnload Source Code & Database
Buat teman-teman yang masih bingung untuk tutorial yang saya bahasa di atas, untuk lebih mudah kalian bisa mendownload secara gratis dibawah ini:
[sociallocker id=”5349″] [/sociallocker]
Selamat Pagi Kang,
saya coba jalankan proyeknya dengan perintah
python app.py kok nggak jalan ya
mohon pencerahannya
Download aja source code nya bang.. trus ikuti langkah2 dari awal untuk proses penginstalan python, mysql dan flask
permisi mau nanya mas, saya coba praktekan ini di Ubuntu
pymysql.err.OperationalError
pymysql.err.OperationalError: (1698, “Access denied for user ‘root’@’localhost'”)
kira-kira kenapa ya terima kasih.
sepertinya itu di bagian autentikasi user db nya mas..
LOVE IT
id_barang hasilnya kok 0 ya setelah di input
terus kalau kita mau input lagi sudah tidak bisa karena sudah ada id_barang = 0
coba cek kolom id_barang di database sepertiya belum menggunakan auto_increment
Alhamdulillah Pak Setiawan atas informasinya dan quick response, sudah berhasil saya berkat informasinya dari Bapak, ternyata benar saya kurang di Auto_increment. 🙂
berikutnya saya ingin menanyakan, hanya untuk informasi saja buat saya yang masih awam mengenai Python, kalau saya melihat python masih tetap menggunakan html, berarti yang sudah terbiasa dengan html, css dan php akan lebih mudah ya, terus ke istimewaan Python apa ya?. Terimakasih atas informasinya.
saya jg baru belajar mas, setau saya python ini lagi ngetrend saat ini, peluangnya cukup bagus kedepan untuk data science dan beberapa teknologi lainnya.
Mau Nanya Bang, Terima kasih sebelumnya ilmunya yang sangat bermanfaat,
Untuk design Layout table nya kok tidak bisa ya?
Padahal sudah saya ikuti langkah2 nya, pas masuk ke localhost :5000 tidak ada tampilan table nya
Hanya tampilang huruf dan data inputan saja yang tampak
Mohon pencerahannya bang
Thanks
Terima Kasih atas tutorial nya Bang.
Ketika saya coba ikuti tutorial ini mendapatkan error: TypeError: __init__() takes 1 positional argument but 5 were given
Mohon pencerahannya
Bang mau nanya klo error __init__ () takes 1 positional argument but 5 were given itu knpa ya
wah sama ternyata . saya kira saya doang yg error __init__() nya
bang kenapa punya saya error waktu edit ya?
TypeError: not all arguments converted during string formatting
begini errornya
File “D:\python\crud\app.py”, line 55, in edit
Open an interactive python shell in this framecursor.execute(‘SELECT * FROM produk WHERE id_barang=%s’, (id_barang))
TypeError: not all arguments converted during string formatting
Tutorial mengenai cara membuat crud berbasis web phyton sangat membantu. Saya mau tanya untuk website belajar pyhton dari awal itu gimana yah ?
TypeError: __init__() takes 1 positional argument but 5 were given
coba sesuaikan pake versi php 7.2
sama saya juga seperti ini, sudah saya coba cocokan dengan versi php7.2 cuma masih sama hasilnya mas , apakah di php.ini nya ada yang perlu di setting kembali ?
untuk coding sudah saya sesuaikan dengan yang di tutorialnya.
saya bisa menggunakan php.7.2 (install lewat xamp+php 7.2)
lalu koneksi nya sedikit saya rubah
conn = pymysql.connect(db=”db_penjualan”, user=”root”, passwd=””,host=”localhost”,port=3306,autocommit=True)
izin mas saya sudah melakukan instalasi aplikasinya, saat app.py sudah running dan menjalankan localhost:5000 ada pesan error openDb() dan conn = pymysql.connect(“localhost”,”root”,””,”db_penjualan” )
saya menggunakan python 3.9.5
coba di cek kembali pengaturan databasenya mba
Coba liat dokumentasi penulisan pymysql.connect(…) di openDb()
Kemungkinan errornya karena versi pymysql yg terbaru berbeda dgn yg ada di tutorial atas. Coba ganti syntax nya dengan yg ada d referensi dokumentasi berikut
Referensi
https://pypi.org/project/PyMySQL/#documentation