orm - 包含多列的 SQLAlchemy 自定义类型

标签 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 .但是没有迹象表明我可以将单个类型映射到多个列。
我想我可以通过使用一个单独的表来实现这一点,每一列都是一个外键,但在我的情况下,我认为将每个点一对一映射到一个单独的表是没有意义的,这仍然无法一次性设置所有相关值。

最佳答案

这是一个基于 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),
    )

关于orm - 包含多列的 SQLAlchemy 自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1986912/

相关文章:

spring-mvc - 即使配置了 log4j.xml,也无法启用 spring orm/事务日志记录

python - 解析 sqlalchemy 存储过程执行的结果

sqlalchemy - Flask wtf SelectField,动态输入和验证

c# - 无法理解 ViewModel 和模型之间的区别

google-app-engine - 使用 Google App Engine 创建引用自身的模型

python - 插入缺少绑定(bind)参数的 sqlalchemy 错误,但在 Workbench 中有效

.net - 分层架构中的 ASP.NET 和 Entity Framework - 仅将 Entity Framework 用于 ORM

java - 在 Hibernate 中使用实体 id 作为引用

mysql - 排序顺序 laravel Eloquent 关系

javascript - 在单独的 Javascript 文件中获取模型值