Python SQLAlchemy - Table Configuration
Posted on Sep 27, 2018 in Python 模組/套件推薦 , Python 程式設計 - 高階 by Amo Chen ‐ 1 min read
先前使用 Django ORM(Object Relational Mapping) 時,偶爾會用到 unique_together ,剛好最近用到 SQLAlchemy 就想說如何做到一樣的事,結果 SQLAlchemy 文件 Table Configuration 就提到如何使用。
Django ORM 對於 table 的設定放在 Meta Class 中,例如 unique_together
, index_together
等等,而 SQLAlchemy 則是放在 model class 的 __table_args__
屬性中。
如果要達到跟 unique_together
相同目的的話,可以在 __table_args__
中這樣設定:
# -*- coding: utf-8 -*-
from sqlalchemy import UniqueConstraint
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Invitation(Base):
__tablename__ = 'invitation'
__table_args__ = (
UniqueConstraint('host', 'invitee', name='uk_host_invitee'),
)
id = Column(Integer, primary_key=True)
host = Column(String)
invitee = Column(String)
上述的設定 UniqueConstraint('host', 'invitee', name='uk_host_invitee')
將 host(主人) 與 invitee(受邀者) 一起做 Unique 的限制,如此一來每位 host 每次邀請的客人都必須不同,也等同於 Django 中的 unique_together = ['host', 'invitee']
的寫法。
p.s. name='uk_host_invitee'
代表 Constrain 名稱為 uk_host_invitee
以上就是關於 __table_args__
的筆記,詳細的說明請進一步參閱官方文件 Table Configuration 。
References
https://docs.sqlalchemy.org/en/latest/orm/extensions/declarative/table_config.html