如何在 Sqlalchemy 中设置用户定义的类型

Fli*_*ixi 5 python sql database orm sqlalchemy

目前我正在尝试使用 Sqlalchemy 从给定的数据库中检索数据。到目前为止,这对我来说效果很好。但是,现在我必须读出这张表

create table DISPLAYOPTIONS (
  DOID integer constraint DO_PK primary key 
        USING INDEX (create index DO_PK_IX on DISPLAYOPTIONS(DOID) ),
  OPT dispopt
);
Run Code Online (Sandbox Code Playgroud)

dispopt自定义类型在哪里定义为

CREATE OR REPLACE TYPE DISPOPT AS OBJECT (
  LABEL_X varchar2(50),
  LABEL_Y varchar2(50),
  LABEL_Z varchar2(50)
);
Run Code Online (Sandbox Code Playgroud)

你如何在 Sqlalchemy 中定义自定义类型?我在文档 http://docs.sqlalchemy.org/en/rel_0_9/core/types.html#creating-new-types 这是正确的起点吗?你知道一些接近我面临的问题的例子吗?

非常感谢和最好的问候,


我现在尝试过的:我在 Stackoverflow 上找到了这个: 如何使用 SQLAlchemy 声明性制作复合列? 链接到文档:http : //docs.sqlalchemy.org/en/latest/orm/mapper_config.html#composite-column-types

并设置:

class DISPOPT(object):
    def __init__(self, LABEL_X, LABEL_Y, LABEL_Z):
        self.LABEL_X = LABEL_X
        self.LABEL_Y = LABEL_Y
        self.LABEL_Z = LABEL_Z 

    def __composite_values__(self):
        return self.LABEL_X, self.LABEL_Y, self.LABEL_Z

class DISPLAYOPTIONS(Base):
    __tablename__ = "DISPLAYOPTIONS"

    DOID = Column(Integer, primary_key = True)

    OPT = composite(
        DISPOPT,
        Column('LABEL_X', String(50)),
    Column('LABEL_Y', String(50)),
    Column('LABEL_Z', String(50)) 
)
Run Code Online (Sandbox Code Playgroud)

但我仍然收到来自数据库的错误消息。

Fli*_*ixi 3

解决方案是遵循

http://docs.sqlalchemy.org/en/rel_0_9/core/custom_types.html#creating-new-types

或书“Essential SQLAlchemy”第 65 页使用UserDefinedTypesqlalchemy 中的类。