使用SqlAlchemy和Alembic创建部分索引

时间:2016-06-08 09:29:55

标签: python sqlalchemy alembic

我的索引具有以下模型:

class User(TableMixin, Base):
    username = Column(String, nullable=False, unique=False)
    password = Column(String, nullable=False, unique=False)

    Index('ix_active_username', "active", username,
          unique=True,
          postgresql_where=("active" is True)
          )

使用TabbleMixin类

class TableMixin():
    id = Column(Integer, primary_key=True)
    active = Column(Boolean, nullable=False, default=True)

我想在postgres db中创建的索引:

CREATE UNIQUE INDEX unique_active_username on user (username, active) 
where active = True;

Active在引号之间,因为它无法识别,因为它在User类中无法识别。

在我运行“alembic revision --autogenerate”后,alembic文件为空。有谁知道我做错了什么?

编辑: 我所要做的就是将索引置于类的范围之外。并改变

的位置
postgresql_where=(User.active == true())

所有代码:

class User(TableMixin, Base):
    username = Column(String, nullable=False, unique=False)
    password = Column(String, nullable=False, unique=False)

class TableMixin():
    id = Column(Integer, primary_key=True)
    active = Column(Boolean, nullable=False, default=True)

Index('ix_active_username', User.active, User.username,
      unique=True,
      postgresql_where=(User.active == true())
      )

感谢IljaEverilä!

1 个答案:

答案 0 :(得分:4)

完整的解决方案:

class User(TableMixin, Base):
    username = Column(String, nullable=False, unique=False)
    password = Column(String, nullable=False, unique=False)

class TableMixin():
    id = Column(Integer, primary_key=True)
    active = Column(Boolean, nullable=False, default=True)

Index('ix_active_username', User.active, User.username,
      unique=True,
      postgresql_where=(User.active == true())
      )