Giới thiệu về alembic
Alembic cung cấp cho ta tạo ra và quản lý của các scripts cho việc quản lý các thay đổi với các mối quan hệ database . Sử dụng SQLAIchemy .Cụ thể, Alembic thường được sử dụng với các hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS) như PostgreSQL, MySQL, SQLite, và Oracle. trong bài viết này chúng ta tập trung vào PostgresSQL
Cài đặt install alembic
Để install alembic chúng ta dùng link này https://alembic.sqlalchemy.org/en/latest/front.html#installation alembic installed thành công thường sẽ là 1 module/python . Nó thường chạy trên máy ảo sử dụng máy ảo để chạy lệnh command alembic
để run nó lên . Một số suggest với phần này là bạn có thể cài máy ảo trên window là wsl chạy linux ubumtu
Migration enviroment
Sử dụng Akenbic start để tạo ra các Migration Enviroment . Nó sẽ tạo ra 1 lệnh script
Việc sử dụng Alembicstart bằng việc tạo Migration Enviroment . Đây là thư mục chứa các tập lệnh dành riêng cho một ứng dụng cụ thể. Migration Enviroment chỉ được tạo một lần và sau đó được duy trì cùng với chính mã nguồn của ứng dụng. Môi trường được tạo bằng lệnh init
của Alembic và sau đó có thể tùy chỉnh để phù hợp với nhu cầu cụ thể của ứng dụng.
- Chúng tôi show cho bạn kiến trúc cua chúng tôi đã tối ưu được
project/ alembic/ env.py README script.py.mako _init_.py versions/ _pycache_.py f480a002fa68_init.py
Với cấu trúc như trên bạn đã có thể sử dụng alembic lưu thông tin thay đổi của MIGRATION
Tạo 1 enviroment với Alembic
Đầu tiên bạn phải mở máy ảo lên mình đang dùng với WSL của window
PS C:\Users\admin> wsl
- Do mình đã cài wsl lên tớ sẽ vào đươc luôn
dunv@DESKTOP-85G2UPJ:/mnt/c/Users/admin$
- Từ đây cd vào thư mục code của mình
cd /mnt/d/Python/Test_Alembic/
- Sau đó chạy lệnh
alembic init
Từ câu lệnh alembic init tớ sẽ tạo ra các thư mục sau khi có lệnh sau thì sẽ là đúng
dunv@DESKTOP-85G2UPJ:/mnt/d/Python/test_alembic$ alembic init alembic Creating directory '/mnt/d/Python/test_alembic/alembic' ... done Creating directory '/mnt/d/Python/test_alembic/alembic/versions' ... done Generating /mnt/d/Python/test_alembic/alembic/script.py.mako ... done Generating /mnt/d/Python/test_alembic/alembic/env.py ... done Generating /mnt/d/Python/test_alembic/alembic/README ... done Generating /mnt/d/Python/test_alembic/alembic.ini ... done Please edit configuration/connection/logging settings in '/mnt/d/Python/test_alembic/alembic.ini' before proceeding.
Sau khi tạo ra các file alembic.init bạn có thể thay đổi file cấu hình này để thay đổi các cấu hình cần thiết
- Quan trọng nhất với phần này mình cần sửa file cấu hình với database postgress . sqlalchemy.url = postgresql://{{Userpostgress}}:{{password}}@{{host}}:{{PORT}}/{{Databasename}} Với thông số trên bạn áp dụng đúng với các cấu hình là có thể connect với database rồi .
Ví dụ của mình sqlalchemy.url = postgresql://us_test:9ki8lj1xu483sdwW@E@127.0.0.1:9998/postgress_test
Tạo 1 migration script mới
- Khi mà bạn có thay đổi gì với model ví dụ kiến trúc như sau
- models init.py # gồm tất cả các submodel ví dụ from application.models.model_danhmuc import * (các model khác nếu cần) model_danhmuc.py
import uuid def default_uuid(): return str(uuid.uuid4()) class Category(CommonModel): __tablename__ = 'category' id = db.Column(String, primary_key=True, default=default_uuid) ma = db.Column(String(255), index=True) ten = db.Column(String(255)) tenkhongdau = db.Column(String) ten_tieng_anh = db.Column(String) active = db.Column(SmallInteger(), default=1)
Để áp dụng table class trên vào trong ứng dụng alembic dùng lệnh sau alembic revision --autogenerate -m "create account table category" Generating /mnt/d/Python/test_alembic/alembic/versions/f480a002fa68_create_account_table_category File được tạo mới như sau f480a002fa68_create_account_table_category.py
"""create account table category Revision ID: f480a002fa68
Revises: Create Date: 2023-10-24 21:45:13.259113 """
from alembic import op
import sqlalchemy as sa revision identifiers, used by Alembic.
revision = 'f480a002fa68'
down_revision = None
branch_labels = None
depends_on = None def upgrade(): # ### commands auto generated by Alembic - please adjust! ### ..... # ### end Alembic commands ### def downgrade(): # ### commands auto generated by Alembic - please adjust! ### ..... # ### end Alembic commands ###
=> Như vậy với lệnh này bạn có thể reverison với các thay đổi bạn đã thay đổi trong model
Chạy alembic với database
- Với câu lệnh trên chúng ta đã generate câu lệnh ra file
- Nhưng nếu để database có thể áp dụng được và thực thi các câu lệnh migration thì alembic cung cấp cho chúng ta 1 câu lệnh upgrade như sau
$ alembic upgrade head
Như vậy đã run lại cho tiến trình process database đã reversion mới trong dataabase có bảngalembic_version
đã update version_num = f480a002fa68 bạn có thể kiểm tra sử dụng câu lệnhSelect * from alembic_version
Một số lệnh hữu ích có thể bạn chưa biết
- Autogenerate:
alembic revision --autogenerate -m <message>
- Tạo 1 migration:
alembic revision -m <message>
- Hiển thị version hiện tại database
alembic current
- Migration history:
alembic history --verbose
- Revert tất cả migrations:
alembic downgrade base
- Revert migrations one by one:
alembic downgrade -1
- Áp dụng all migrations:
alembic upgrade head
- Áp dụng migrations one by one:
alembic upgrade +1
- Hiển thị all raw SQL:như craete , delete alter ...
alembic upgrade head --sql
- Reset the database:
alembic downgrade base && alembic upgrade head
Tổng kết lại
- Alembic là một công cụ và thư viện phổ biến trong lĩnh vực phát triển ứng dụng và quản lý cơ sở dữ liệu. Nó thường được sử dụng để quản lý và duy trì phiên bản cơ sở dữ liệu của một ứng dụng. Cụ thể, Alembic thường được sử dụng với các hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS) như PostgreSQL, MySQL, SQLite, và Oracle.
- Các tính năng chính của Alembic bao gồm:
- Migration: Alembic cho phép bạn tạo và quản lý các phiên bản (migrations) của cơ sở dữ liệu. Mỗi phiên bản có thể chứa các thay đổi cụ thể về cơ sở dữ liệu, chẳng hạn như việc tạo hoặc xóa bảng, thay đổi cấu trúc bảng, hoặc thêm cột mới.
- Tự động phát hiện thay đổi: Alembic có khả năng tự động phát hiện các thay đổi trong cơ sở dữ liệu và tạo các phiên bản tương ứng để áp dụng các thay đổi đó.
- Tạo và áp dụng phiên bản: Bằng cách sử dụng Alembic, bạn có thể tạo các phiên bản cơ sở dữ liệu và sau đó áp dụng chúng để đảm bảo cơ sở dữ liệu luôn đồng nhất với mã nguồn ứng dụng của bạn.
- Đảm bảo tính nhất quán của cơ sở dữ liệu: Alembic giúp đảm bảo tính nhất quán của cơ sở dữ liệu trong quá trình phát triển và triển khai ứng dụng, đặc biệt khi làm việc với nhiều thành viên trong nhóm.
- Alembic thường được sử dụng trong các ứng dụng phát triển bằng Python và các framework web như Flask và Django, nhằm giúp quản lý cơ sở dữ liệu dễ dàng và hiệu quả.