Flask-FileAlchemy
adalah ekstensi Flask yang memungkinkan Anda menggunakan file teks biasa berformat Markdown atau YAML sebagai penyimpanan data utama untuk aplikasi Anda.
$ pip install flask-filealchemy
Batasan penggunaan penyimpanan data untuk aplikasi yang hanya harus dijalankan secara lokal cukup longgar dibandingkan dengan aplikasi yang harus melayani lalu lintas produksi. Untuk aplikasi seperti itu, biasanya tidak masalah jika mengorbankan kinerja demi kemudahan penggunaan.
Salah satu kasus penggunaan yang sangat kuat di sini adalah menghasilkan situs statis. Meskipun Anda dapat menggunakan Frozen-Flask untuk "membekukan" seluruh aplikasi Flask menjadi sekumpulan file HTML, aplikasi Anda masih perlu membaca data dari suatu tempat. Ini berarti Anda harus menyiapkan penyimpanan data, yang (secara lokal) cenderung berbasis file SQLite. Meskipun melakukan tugasnya dengan sangat baik, ini juga berarti mengeksekusi pernyataan SQL untuk memasukkan data.
Bergantung pada berapa banyak model data yang Anda miliki dan jenis apa yang dikandungnya, hal ini dapat dengan cepat menjadi tidak terkendali (bayangkan harus menulis pernyataan INSERT
untuk postingan blog).
Selain itu, Anda tidak dapat mengontrol versi data Anda. Secara teknis bisa, tetapi perbedaannya tidak masuk akal bagi manusia.
Flask-FileAlchemy memungkinkan Anda menggunakan penyimpanan data alternatif - file teks biasa.
File teks biasa memiliki keuntungan karena lebih mudah ditangani oleh manusia. Selain itu, Anda dapat mengontrol versinya sehingga data dan kode aplikasi Anda diperiksa bersama-sama dan berbagi riwayat.
Flask-FileAlchemy memungkinkan Anda memasukkan data dalam file teks biasa berformat Markdown atau YAML dan memuatnya sesuai dengan model SQLAlchemy yang telah Anda tetapkan menggunakan Flask-SQLAlchemy Data ini kemudian dimasukkan ke dalam penyimpanan data apa pun yang Anda gunakan (SQLite dalam memori berfungsi paling baik) dan kemudian siap untuk aplikasi Anda melakukan kueri sesuka hati.
Hal ini memungkinkan Anda mempertahankan kenyamanan situs dinamis tanpa mengorbankan kesederhanaan situs statis.
Tentukan model data Anda menggunakan API SQLAlchemy standar (Flask-). Sebagai contoh, model BlogPost
dapat didefinisikan sebagai berikut.
app = Flask ( __name__ )
# configure Flask-SQLAlchemy
app . config [ 'SQLALCHEMY_DATABASE_URI' ] = 'sqlite:///:memory:'
db = SQLAlchemy ()
db . init_app ( app )
class BlogPost ( db . Model ):
__tablename__ = 'blog_posts'
slug = Column ( String ( 255 ), primary_key = True )
title = Column ( String ( 255 ), nullable = False )
content = Column ( Text , nullable = False )
Selanjutnya, buat direktori data/
di suatu tempat pada disk Anda (untuk mempermudah, disarankan untuk memiliki direktori ini di root aplikasi). Untuk setiap model yang Anda tetapkan, buat direktori di bawah direktori data/
ini dengan nama yang sama dengan atribut __tablename__
.
Saat ini kami mendukung tiga cara berbeda untuk mendefinisikan data.
Cara pertama adalah dengan memiliki beberapa file YAML di dalam direktori data/<__tablename__>/
, setiap file berhubungan dengan satu record.
Dalam contoh "blog", kita dapat menentukan catatan BlogPost
baru dengan membuat file data/blog_posts/first-post-ever.yml
dengan konten berikut.
slug : first-post-ever
title : First post ever!
content : |
This blog post talks about how it's the first post ever!
Menambahkan lebih banyak file seperti itu di direktori yang sama akan menghasilkan lebih banyak catatan.
Untuk model "lebih kecil" yang tidak memiliki lebih dari 2-3 kolom, Flask-FileAlchemy mendukung pembacaan dari file _all.yml
. Dalam kasus seperti ini, daripada menambahkan satu file untuk setiap baris, cukup tambahkan semua baris di file _all.yml
di dalam direktori tabel.
Untuk contoh "blog", tampilannya seperti berikut.
- slug : first-post-ever
title : First post ever!
content : This blog post talks about how it's the first post ever!
- slug : second-post-ever
title : second post ever!
content : This blog post talks about how it's the second post ever!
Dimungkinkan juga untuk memuat data dari file Markdown gaya Jekyll yang berisi metadata Frontmatter.
Dalam contoh blog, dimungkinkan untuk membuat data BlogPost
baru dengan mendefinisikan file data/blog_posts/first-post-ever.md
dengan konten berikut.
---
slug : first-post-ever
title : First post ever!
---
This blog post talks about how it's the first post ever!
Harap perhatikan bahwa saat mendefinisikan data menggunakan penurunan harga, nama kolom yang terkait dengan isi penurunan harga utama harus content
.
Terakhir, konfigurasikan Flask-FileAlchemy
dengan pengaturan Anda dan minta untuk memuat semua data Anda.
# configure Flask-FileAlchemy
app . config [ 'FILEALCHEMY_DATA_DIR' ] = os . path . join (
os . path . dirname ( os . path . realpath ( __file__ )), 'data'
)
app . config [ 'FILEALCHEMY_MODELS' ] = ( BlogPost ,)
# load tables
FileAlchemy ( app , db ). load_tables ()
Flask-FileAlchemy
kemudian membaca data Anda dari direktori tertentu, dan menyimpannya di penyimpanan data pilihan Anda yang telah Anda konfigurasikan dengan Flask-FileAlchemy
(preferensinya adalah sqlite:///:memory:
).
Harap dicatat bahwa tidak mungkin menulis ke database ini menggunakan db.session
. Secara teknis hal ini diperbolehkan, namun perubahan yang dilakukan aplikasi Anda hanya akan terlihat di penyimpanan data dalam memori tetapi tidak akan disimpan ke disk.
Kontribusi dipersilakan!
Harap pastikan Anda telah menginstal Python 3.7+ dan Puisi.
Git mengkloning repositori - git clone https://github.com/siddhantgoel/flask-filealchemy
.
Instal paket yang diperlukan untuk pengembangan - poetry install
.
Pada dasarnya itu saja. Anda sekarang seharusnya dapat menjalankan rangkaian pengujian - poetry run pytest
.