SQLAlchemy通用关系mixin

时间:2016-04-23 19:44:22

标签: python orm sqlalchemy

我正在开发一个SQLAlchemy来定义一堆mixin classes应用程序应该能够导入和扩展其模型。

查看documentation时,mixin类是创建知道最终表名的,但是在通用库的情况下,应用程序将使用的最终表名称是未知的。

参加以下mixin课程:

import sqlalchemy as sa

class UserMixin(object):
    id = sa.Column(sa.Integer(), primary_key=True)
    first_name = sa.Column(sa.Unicode(255))
    last_name  = sa.Column(sa.Unicode(255))

class ItemMixin(object):
    id = sa.Column(sa.Integer(), primary_key=True)
    name = sa.Column(sa.Unicode(255))
    short_description = sa.Column(sa.Unicode(255))

class OrdersMixin(object):
    id = sa.Column(sa.Integer(), primary_key=True)
    user_id = sa.Column(sa.Integer(), sa.ForeignKey('???'))
    item_id = sa.Column(sa.Integer(), sa.ForeignKey('???'))

然后是定义其模型的应用程序:

import sqlalchemy as sa
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class MyUser(UserMixin, Base):
    __tablename__ = 'myuser'

class MyItem(ItemMixin, Base):
    __tablename__ = 'myitem'
    total = sa.Column(sa.Integer())

class MyOrders(OrdersMixin, Base):
    __tablename__ = 'myorders'

我对这个模型有两个问题:

  1. 除了重新定义扩展模型中的关系列之外,mixin类如何独立构建关系。
  2. 外键的类型由mixin类假定,但表的id可能来自应用程序本身或来自另一个mixin类。
  3. 我试图实施的模型是否正确?什么是解决这个问题的正确方法?

0 个答案:

没有答案