SQLAlchemy自定义类型包含多个列

时间:2009-12-31 20:03:05

标签: orm model sqlalchemy

我想在我的模型中将数据类型表示为单个列,但实际上数据将存储在数据库的多个列中。我在SQLAlchemy中找不到任何有关如何执行此操作的好资源。

我希望我的模型看起来像这样(这是一个简单的例子,使用几何而不是我真正的问题,这很难解释):

class 3DLine(DeclarativeBase):
    start_point = Column(my.custom.3DPoint)
    end_point = Column(my.custom.3DPoint)

这样我可以一次分配一个具有点的(x,y,z)分量的对象,而无需单独设置它们。如果我必须将每个组件分开,这可能会变得很难看,特别是如果每​​个类都有几个这样的复合对象。我会将这些值组合成一个编码字段,除了我需要分别查询每个值。

我能够找到如何使用单个列in the documentation制作自定义类型。但是没有迹象表明我可以将单个类型映射到多个列。

我想我可以通过使用一个单独的表来实现这一点,并且每列都是一个外键,但在我的情况下,我认为将每个点的一对一映射到一个单独的表是不合理的,这仍然无法一次性设置相关值。

1 个答案:

答案 0 :(得分:7)

以下是基于documentation的最小示例:

class 3DPoint(object):
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

     def __composite_values__(self):
        return (self.x, self.y, self.z)

class 3DLine(DeclarativeBase):
    start_point = sqlalchemy.orm.composite(
        3DPoint,
        Column('start_point_x', Integer, nullable=False),
        Column('start_point_y', Integer, nullable=False),
        Column('start_point_z', Integer, nullable=False),
    )