首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类不进行多形性加载。

类不进行多形性加载。
EN

Stack Overflow用户
提问于 2014-02-11 17:39:34
回答 1查看 39关注 0票数 1

使用SQLAlchemy,我已经为单个表继承配置了类。当我查询基类时,特定的类不会加载。相反,只加载基类的实例。我是不是弄错了什么东西?

代码语言:javascript
复制
from sqlalchemy import Column, Integer, Enum
from sqlalchemy.dialects.postgresql import TEXT

from sqlalchemy import MetaData, create_engine
from sqlalchemy.orm import sessionmaker, scoped_session

from sqlalchemy.ext.declarative import declarative_base

info = 'postgresql+psycopg2://panel_app@localhost:5432/panel_db'

engine = create_engine(info)

metadata = MetaData()
session = scoped_session(sessionmaker(bind=engine))

Base = declarative_base(metadata=metadata)

class Wave(Base):
    """Represent a Wave."""

    __tablename__ = 'waves'

    wave_id = Column(Integer, primary_key=True)
    wave_name = Column(TEXT)
    type = Column(Enum('emailed', 'triggered', 'anonymous', name='wave_type'), nullable=False)

    __mapper_args = {
        'polymorphic_on': type,
    }


class AnonymousWave(Wave):

    __mapper_args__ = {
        'polymorphic_identity': 'anonymous'
    }


class EmailedWave(Wave):
    """Represents a wave that is emailed out."""

    __mapper_args__ = {
        'polymorphic_identity': 'emailed',
    }

数据库中的行是

代码语言:javascript
复制
select wave_id, wave_name, type from waves;
 wave_id |            wave_name             |  type
---------+----------------------------------+---------
       1 | Wave 1                           | emailed
      10 | MM 1 - client approval test      | emailed
       2 | Wave 1                           | emailed
       3 | Wave 1                           | emailed
       4 | Wave 1                           | emailed
       5 | Wave 1                           | emailed
       6 | Wave 1                           | emailed
       7 | Wave 1                           | emailed
       8 | Wave 1                           | emailed
(9 rows)

示例代码:

代码语言:javascript
复制
waves = session.query(Wave).all()
from pprint import pprint
pprint(waves)
for wave in waves:
    print wave.__class__.__name__ + " " + wave.type

及其产出:

代码语言:javascript
复制
[<__main__.Wave object at 0x2324b50>,
 <__main__.Wave object at 0x2324d50>,
 <__main__.Wave object at 0x2324dd0>,
 <__main__.Wave object at 0x2324e50>,
 <__main__.Wave object at 0x2324ed0>,
 <__main__.Wave object at 0x2324f90>,
 <__main__.Wave object at 0x2329090>,
 <__main__.Wave object at 0x2329150>,
 <__main__.Wave object at 0x2329210>]
Wave emailed
Wave emailed
Wave emailed
Wave emailed
Wave emailed
Wave emailed
Wave emailed
Wave emailed
Wave emailed
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-11 17:56:32

代码语言:javascript
复制
__mapper_args = {
    'polymorphic_on': type,
}

是你的问题。

这是一个很难看到的错误,但是您缺少了两个下划线“__”

代码语言:javascript
复制
__mapper_args__ = {
    'polymorphic_on': type,
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21709073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档