使用 SqlAlchemy 和 Alembic 创建部分索引

Create partial index with SqlAlchemy and 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

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

我希望在我的 postgres 数据库中创建的索引:

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

Active 在引号之间,因为它无法识别,因为它在用户内部无法识别 class。

在我 运行 "alembic revision --autogenerate" 之后,alembic 文件是空的。有谁知道我做错了什么?

编辑: 我所要做的就是将索引放在 class 的范围之外。并将位置更改为

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())
      )

感谢 Ilja Everilä!

完整的解决方案:

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())
      )