8

我知道有人问过类似的问题,但是我真的很难理解通用字段是如何在 SQLAlchemy 中实现的。

我有一个权限类/表,我想包含一个可以与任何模型类型相关的字段。

我查看了示例和这篇博文http://techspot.zzzeek.org/2007/05/29/polymorphic-associations-with-sqlalchemy/

是否可以在没有单独表格的情况下建立通用关系?仅仅通过存储object_type和id?这些方面的东西:

class Permission(AbstractBase):
    user = relationship("User", backref=backref('permissions'))
    permission_type = column(String())
    object = #The object the permission applies to, could be any type.

我想只是一个非常简单的例子将不胜感激!

另外,值得注意的是我来自 Django 背景!

谢谢

4

2 回答 2

10

您也可以generic_relationshipsqlalchemy-utils包装中使用。

这是他们文档的示例

from sqlalchemy_utils import generic_relationship

class User(Base):
    __tablename__ = 'user'
    id = sa.Column(sa.Integer, primary_key=True)

class Customer(Base):
    __tablename__ = 'customer'
    id = sa.Column(sa.Integer, primary_key=True)

class Event(Base):
    __tablename__ = 'event'
    id = sa.Column(sa.Integer, primary_key=True)
    object_type = sa.Column(sa.Unicode(255))
    object_id = sa.Column(sa.Integer)
    object = generic_relationship(object_type, object_id)
于 2016-09-25T08:09:59.157 回答
3

一天后有人问了同样的问题,我指出了我们为这类事情提供的三个示例,但我还写了一个新示例,它将(大部分)做与 Django 所做的相同的事情(减去那个奇怪的“内容类型”表): sqlalchemy 通用外键(如在 django ORM 中)

于 2013-07-20T02:19:28.590 回答