具有相同nam的复合键的SQLAlchemy部分索引

2024-10-02 06:35:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python2.7和SQLAlchemy 0.9.8并尝试使用部分索引。在

我有两张桌子(只是相关部分)

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',
)  

我想创建一个部分索引,当设计的shortcode不为null(它存在)时,它在designerange中应该是唯一的。在

我正在尝试这样的事情

^{pr2}$

这是最终的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子句中。谢谢


Tags: idtruesqlsqlalchemyunicoderangecolumnclass
1条回答
网友
1楼 · 发布于 2024-10-02 06:35:17

我已经用

@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)),
)

所以,我不想从外键表中获取shortcode,而是获取它的惟一id

相关问题 更多 >

    热门问题