建立SQLAlchemy的ORM類的基類(一)
阿新 • • 發佈:2019-01-23
SQLAlchemy功能非常強大,一般來說我們可以採用下面方法建立一個ORM類.
from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker engine = create_engine('sqlite:///:memory:', echo=True) Session = sessionmaker(bind=engine) Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) engine .create_all()
在上面例中,我們要建立的ORM類均要基於Base,如果我們要建立一個自己的ORM基類,應該這樣:
class BaseModelMixin(object): """ 為所有Model提供公用方法 """ @declared_attr def id(self): return Column(String(32),primary_key=True,default=uuid.uuid4().hex)#唯一性的UUID def test(self): pass ModelBase=DeclarativeBase(cls=BaseModelMixin)
上述例子中,我們為所有ORM類提供了一個基類,所有基於ModelBase的ORM model均具有一個uuid id欄位和一個test方法。
上述例子要點是:
1、為DeclarativeBase提供一個cls引數,該引數的成員會被ModelBase繼承或mixin.
2、為基類增加Column不能直接定義,只能通過@declared_attr修飾符定義。