1. 程式人生 > >建立SQLAlchemy的ORM類的基類(一)

建立SQLAlchemy的ORM類的基類(一)

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修飾符定義。