使用 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())
)
我有以下型号的索引:
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())
)