May 17, 2016

SQLAlchemy - Phần 1 - Xây dựng kiến trúc

SQLAlchemy - ORM Schema
Lọ mọ muốn làm việc với Python, rồi lại muốn tiếp cận ORM trên nền Python. Không thích cách làm việc cứng ngắt của Django, và thấy nó to đùng ra, không thích hợp cho việc học tập những thứ nhỏ nhặt.Loay hoay 1 hồi thì ra anh chàng này, khá hay, đơn giản, nhỏ gọn, tích hợp được nhiều thứ loại database, thấy cũng vui. Bắt tay viết loạt bài này chia sẻ cho những ai cùng quan tâm vậy (không ai quan tâm thì xem như bài ghi chú cho cá nhân cũng vui ^^ )

Bài này chia sẻ cách tạo kiến trúc database (shema) bằng cách dùng ORM của SQLAlchemy và cơ sở dữ liệu dùng cho loạt bài này chắc chắn là dùng MySQL - một cơ sở dữ liệu rất phổ biến, thông dụng.

1 - Cài đặt

Đầu tiên hết thì chúng ta cần cài đặt một số library dùng cho việc này. Chắc chắn là phải có cái library SQLAlchemy mà chúng ta cần thao tác rồi
pip install sqlalchemy

Tiếp theo là để thao tác với MySQL, chúng ta cần một library nữa, ở đây mình dùng PyMySQL
pip install pymysql

2 - Xây dựng Schema

Với ORM thì mỗi class tương ứng với một table, với SQLAlchemy cũng không ngoại lệ. Bạn theo 4 tiêu chí bên dưới để xây dựng ORM Schema trong SQLAlchemy

  1. Kế thừa từ đối tượng declarative_base
  2. Thiết lập __tablename__ đặt tên cho table
  3. Chứa một hoặc nhiều thuộc tính là đối tượng Column
  4. Đảm bảo phải có Primary Key
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class ClassName(Base):
    __tablename__ = "table_name"
    id = Column(Integer(), primary_key=True)
    name = Column(String(300), nullable=False)

Tạo ràng buộc quan hệ

Sử dụng phương thức relationship để thực hiện ràng buộc
from sqlalchemy.orm import relationship

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    children = relationship("Child", back_populates="parent")

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))
    parent = relationship("Parent", back_populates="children")

3 - Tạo cơ sở dữ liệu

Để có thể tạo cơ sở dữ liệu vào DBMS, trước hết chúng ta cần tạo engine tương ứng với loại CSDL mà mình chọn. Sau đó thông qua đối tượng declarative_base để thực hiện tạo cơ sở dữ liệu.
from sqlalchemy import create_engine

connect_string = 'mysql+pymysql://username:password@host/dbname[?options]'
engine = create_engine(connect_string)
Base.metadata.create_all(engine)

Demo


và cuối cùng là gọi hàm thực hiện lệnh
from orm_schemas import persist_database

persist_database('root', '123456', 'test')

No comments:

Post a Comment