2015-11-17 2 views
0

Я использую Python 2.7 и SQLAlchemy 0.9.8 и пытаюсь использовать частичные индексы.SQLAlchemy Partial Index с составными ключами с тем же именем

У меня есть две таблицы (только соответствующая часть)

class DesignerRange 
    __tablename__ = 'designer_ranges' 
    shortcode = Column(Unicode(12)) 

class Design 
    __tablename__ = 'designs' 
    shortcode = Column(Unicode(12)) 
    designer_range_id = Column(
     Integer, 
     ForeignKey('designer_ranges.id'), 
     nullable=False, 
    ) 
    designer_range = relationship(
     DesignerRange, 
     backref=backref(
     'designs', 
     single_parent=True, 
    ), 
    lazy='joined', 
) 

И я хочу, чтобы создать частичный индекс, что при шорткод в дизайн не является нулевым (он существует) оно должно быть уникальным в пределах DesignerRange ,

Я пытаюсь что-то вроде этого

@declarative.declared_attr 
def __table_args__(cls): 
    return ( 
      Index('design_shortcode', 
       table('designer_ranges', column('shortcode')).c.shortcode, 
       cls.shortcode, unique=True, 
       postgresql_where=(cls.shortcode!=None)), 
      ) 

Это результирующее Alembic миграция

op.create_index('design_shortcode', 'designs', ['shortcode', 'shortcode'], unique=True, postgresql_where=sa.text('designs.shortcode IS NOT NULL')) 

Но я получаю это предупреждение

sqlalchemy/sql/base.py:508: SAWarning: Column 'shortcode' on table <sqlalchemy.sql.selectable.TableClause at 0x7f50a1768550; designer_ranges> being replaced by Column('shortcode', Unicode(length=12), table=<designs>), which has the same key. Consider use_labels for select() statements. 

Я понятия не имею, куда примените use_labes в этом случае, похоже, существует только в предложении select. Благодаря

ответ

0

Я решил свою проблему с помощью

@declarative.declared_attr 
def __table_args__(cls): 
    return (
    Index('design_shortcode_idx', 
      cls.designer_range_id, 
      cls.shortcode, unique=True, 
      postgresql_where=(cls.shortcode!=None)), 
) 

Таким образом, вместо того, чтобы пытаться получить шорткод от внешнего ключа таблицы я просто получаю свой уникальный идентификатор.

Смежные вопросы