- vừa được xem lúc

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

0 0 13

Người đăng: Du Code Lởm

Theo Viblo Asia

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ả.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Lập Trình Hướng Đối Tượng trong Python

Chào các bạn Trong bài này, bạn sẽ tìm hiểu về Lập trình hướng đối tượng (OOP) bằng Python và khái niệm cơ bản của nó và một số các ví dụ. Các bạn cùng tìm hiểu trong bài viết của mình nhé.

0 0 50

- vừa được xem lúc

Lớp trong Python

. Hôm ni, mình học tiếp về bạn “Lớp(class) trong python”, bài blog tiếp theo nằm trong series “Khám phá Đại Bản Doanh Python”(nội dung trong bài series này từ chủ yếu mình lấy từ python.org rồi viết lại hoặc dịch lại theo ngôn ngữ của mình).

0 0 33

- vừa được xem lúc

Tìm hiểu về thư viện Numpy trong Python(Phần 3)

Trong bài viết trước tôi đã giới thiệu cho bạn về NumPy, tìm hiểu về Mảng trong NumPy. Trong bài viết này chúng ta sẽ tiếp tục tìm hiểu về các kiểu dữ liệu khác trong NumPy.

0 0 141

- vừa được xem lúc

Hướng dẫn cài đặt Anaconda trên Ubuntu

Anaconda là một nền tảng mã nguồn mở về Data Science và Machine Learning trên Python thông dụng nhất hiện nay, Anaconda có vai trò đơn giản hóa việc triển khai và quản lí các gói cài đặt khi làm việc với Python. Anaconda được cài đặt dễ dàng trên 3 nền tảng hệ điều hành thông dụng hiện nay là Ubuntu

0 0 43

- vừa được xem lúc

Tùy chỉnh Exceptions trong Python

Chào các bạn trong bài viết này, mình sẽ giới thiệu với các bạn về cách tùy chỉnh các Exceptions trong Python.Mình sẽ giải thích cho các bạn hiểu và cách xử dụng chúng.

0 0 36

- vừa được xem lúc

Không gian tên(namspace) và phạm vi(scope) trong Python

. Khi mình ngồi học và dịch bài "Class trong Python" cho sê-ri "Khám Phá Đại Bản Doanh Python", mình đã đụng hai bạn này, và các bạn thật là trừu tượng và khó gặm. Thế là mình tìm kiếm và viết bài này để hiểu rõ hơn về hai bạn ấy, hi vọng bạn đọc thêm để hiểu về Python nhé.

0 0 49