+3

Cài đặt Alembic với SQLAichemy trong python

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ảng alembic_version đã update version_num = f480a002fa68 bạn có thể kiểm tra sử dụng câu lệnh Select * 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:
  1. 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.
  2. 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 đó.
  3. 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.
  4. Đả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.
  5. 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ả.

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí