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

From SQLAIchemy to Migrate database in project (Part 1)

0 0 7

Người đăng: Ben

Theo Viblo Asia

Chào các bạn đến với bài viết của mình, đã rất lâu rồi mình mới có thể ngồi lại và chia sẻ một số kiến thức mà mình đã tìm hiểu được cho các bạn đọc. Trong một dự án AI có yêu cầu lưu trữ dữ liệu, việc sử dụng cơ sở dữ liệu là cần thiết. Mình đã chọn SQLAlchemy để thực hiện việc này, và đó chính là lý do bài viết này được hoàn thành.

Cảm ơn các bạn đã lựa chọn bài viết này để tham khảo, nếu có bất cứ thắc mắc gì hãy comment bến dưới nhé! Bắt đầu thôi nào.

SQLAlchemy

SQLAlchemy

SQLAlchemy là khái niệm phổ biến trong python nếu bạn sử dụng đến database trong một dự án. Bởi lẽ, nó được xây dựng và thiết kế nhằm mục đích làm việc với cơ sở dữ liệu quan hệ ( Relational Database Management System - RMBMS) như MySQL, PostgreSQL, SQLite và nhiều loại khác. Nó cung cấp một công cụ mạnh mẽ để quán lý cơ sở dữ liệu một cách hiệu quả và dễ dàng.

Hai phần quan trọng nhất của SQLAlchenmy là Object Relational Mapping (ORM)Core

1. ORM

ORM giúp chúng ta dễ dàng thao tác với dữ liệu với Database lớn, giúp cho chúng ta dễ code, dễ maintain hơn. Bạn có thể tương tác với cơ sở dữ liệu thông qua các objects Python thay vì phải viết các câu lệnh SQL thủ công

Các thành phần chính của ORM:

  • Declarative Base: Sử dụng để định nghĩa các class ánh xạ tới các bảng trong database
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
  • Class Mapping: Định nghĩa các lớp tương ứng với các bảng trong databse
from sqlalchemy import Column, Integer, String
class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) age = Column(Integer)
  • Session: Quản lý các các phiên làm việc (session) với database, giúp quản lý các thao tác CRUD (Create, Read, Update, Delete) một cách hiệu quả và đồng bộ hóa các thay đổi với cơ sở dữ liệu
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
  • Query: Cho phép thực hiện các truy vấn trên các đối tượng
users = session.query(User).all()
for user in users: print(user.name, user.age)

2. SQLAlchemy Core

SQLAlchemy Core là lớp trừu trượng thấp hơn, cho phép bạn viết các câu lệnh SQL một các trực tiếp nhưng vẫn tận dụng được các tính năng quản lý kết nối và tối ưu hóa.

Core cung cấp một cách làm việc với SQL thông qua các đội tượng "Table", "Column", "Expression".

Các thành phần của SQLAlchemy Core

  • Engine: Quán lý kết nối với cơ sở dữ liệu và là giao diện chính để tương tác với cơ sở dữ liệu
from sqlalchemy import create_engine
engine = create_engine('sqlite:///example.db')
  • MetaData: Lưu trữ thông tin về cấu trúc bảng và mối quan hệ giữa các bảng
from sqlalchemy import MetaData
metadata = MetaData()
  • Table: Đại diện cho một bảng trong database
from sqlalchemy import Table, Column, Integer, String
users = Table('users', metadata, Column('id', Integer, primary_key=True), Column('name', String), Column('age', Integer)
)
  • Column: Đại diện cho một cột trong bảng
Column('name', String)

3. So sánh SQLAlchemy Core và ORM

  • SQLAlchemy Core:
    • Làm việc trực tiếp với SQL, có tính linh hoạt cao
    • Phù hợp với các tác vụ điều chỉnh nhiều và phức tạp
    • Cần hiểu rõ về SQL và cấu trúc của cơ sở dữ liệu
  • ORM:
    • Dễ sử dụng và làm việc với dữ liệu dưới dạng các Object trong Python
    • Giảm thiểu viết các câu lệnh SQL thủ công
    • Phù hợp cho các tác vụ CRUD thông thường với các ứng dụng hướng đối tượng (OOP)

4. Kết hợp SQLAlchemy Core và ORM

SQLAlchemy cho phép kết hợp cả Core và ORM để tận dụng lợi thế của cả hai phương pháp tiếp cận. Ví dụ, bạn có thể sử dụng ORM để quản lý các đối tượng và Core để thực hiện các truy vấn phức tạp hoặc tùy chỉnh.

SQLAlchemy là một công cụ mạnh mẽ và linh hoạt, cho phép bạn chọn phương pháp tiếp cận phù hợp nhất với nhu cầu của dự án, đồng thời tận dụng lợi thế của cả ORM và Core.

# Sử dụng ORM để quản lý đối tượng
new_user = User(name='Alice', age=30)
session.add(new_user)
session.commit() # Sử dụng Core để thực hiện truy vấn tùy chỉnh
from sqlalchemy import select
stmt = select([users]).where(users.c.age > 20)
result = engine.execute(stmt)
for row in result: print(row)

Migrate Database

Migrate Database là gì

Database migration (di chuyển cơ sở dữ liệu) là quá trình quản lý và áp dụng các thay đổi đối với cấu trúc của cơ sở dữ liệu trong suốt vòng đời của một dự án. Các thay đổi này có thể bao gồm:

  • Thêm, sửa, xóa bảng
  • Thêm, sửa, xóa cột
  • Thay đổi kiểu dữ liệu của cột
  • Thêm, sửa, xóa các ràng buộc (constraints)

Mục tiêu của quá trình migration là duy trì sự đồng bộ giữa mã nguồn và cấu trúc cơ sở dữ liệu, giúp quản lý các thay đổi một cách hệ thống và giảm thiểu lỗi.

Tại sao cần migrate database?

  • Phát Triển và Bảo Trì:
    • Khi ứng dụng phát triển, yêu cầu về dữ liệu cũng thay đổi. Migration giúp cập nhật cơ sở dữ liệu mà không gây gián đoạn cho ứng dụng.
  • Quản Lý Phiên Bản:
    • Migration cho phép theo dõi các thay đổi trong cơ sở dữ liệu và quay lại phiên bản trước nếu cần thiết, hỗ trợ quản lý phiên bản cơ sở dữ liệu tương tự như cách quản lý mã nguồn.
  • Tự Động Hóa:
    • Migration có thể được tự động hóa để áp dụng các thay đổi một cách an toàn và nhất quán trên nhiều môi trường (phát triển, kiểm thử, sản xuất).

Alembic: Công cụ Migration cho SQLAlchemy

SQLAlchemy không cung cấp trực tiếp các công cụ để quản lý migration (di chuyển và thay đổi cấu trúc cơ sở dữ liệu), nhưng nó thường được sử dụng cùng với Alembic, một công cụ quản lý migration mạnh mẽ dành cho SQLAlchemy. Alembic cho phép bạn theo dõi và áp dụng các thay đổi đối với cấu trúc cơ sở dữ liệu một cách dễ dàng và có kiểm soát.

Alembic cung cấp một loạt các tính năng để quản lý migration, bao gồm:

  • Tạo và quản lý các phiên bản migration: Giữ các thay đổi cơ sở dữ liệu dưới dạng các file migration.
  • Tự động tạo migration: Tạo ra các migration dựa trên sự khác biệt giữa mô hình ORM và cấu trúc cơ sở dữ liệu hiện tại.
  • Áp dụng và quay lui migration: Di chuyển tới phiên bản cụ thể hoặc quay lại phiên bản trước đó.

Tổng kết

Trong bài viết này mình đã chia sẻ cho các bạn về cách sử dụng đến database trong một dự án bằng Python với SQLAlchemy và các quản lý các phiên bản (migration) database. Yên tâm, đây chỉ là phần 1 thôi, ở phần tiếp theo mình sẽ gửi tới các bạn kĩ hơn về cách khở tạo database bằng cách sử dụng PostgreSQL, cách cài đặt chi tiết Alembic để dử dụng với SQLAlchemy nhé. Hãy cùng ngóng chờ phần 2 của bài viết. Cảm ơn tất cả các bạn đã dành thời gian cho bài viết của mình. Have a good day~~

Bình luận

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

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

Hiệp phương sai và hệ số tương quan tuyến tính trong Python

Giới thiệu. Làm việc với các biến trong phân tích dữ liệu luôn đặt ra câu hỏi: Các biến phụ thuộc, liên kết và thay đổi với nhau như thế nào? Các biện pháp hiệp phương sai và hệ số tương quan tuyến tính giúp thiết lập điều này.

0 0 68

- 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

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

Tản mạn một chút về kỹ thuật Streaming

Lời mở đầu. Hôm nay trong lúc rảnh rỗi tôi ngồi tìm hiểu kỹ thuật streaming và áp dụng nó bằng Python. Bài viết có thể có thiếu sót mong các bạn thông cảm. Stream là một kỹ thuật chuyển dữ liệu theo dòng ổn định và liên tục.

0 0 74

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

Vì sao chọn FastAPI

Introduction. Gần đây, do nhu cầu phát triển theo mô hình microservice ngày càng phổ biến, mình chủ yếu code mảng Python - Backend nên được phép chọn một framework để phát triển project mới cho công ty, sau khi cân nhắc giữa 3 framework phổ biến hiện tại sử dụng Python là Django, Flask và FastAPI, m

0 0 44

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

Introduction to Google Cloud AutoML Vision

With the rapid development of technology, a Data Scientist could achieve their job like training ML models faster. The Word "AutoML"(also known as Automated machine learning) comes and now plays a cru

0 0 83

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

Telegram Bot - Cào Dữ Liệu Từ VnExpress Bằng Python

Chào mọi người, sau bao ngày với các bài viết về lỗi bảo mật thì hôm nay mình sẽ đổi gió tí nhỉ :v. Vì thế nên hôm nay mình sẽ hướng dẫn mọi người làm 1 con bot Telegram bằng Python nhé.

1 0 223