SQLAlchemy: частичное ограничение уникальности, когда поле имеет определенное значение - PullRequest
2 голосов
/ 30 января 2020

В моем проекте flask мне нужна таблица с уникальным ограничением на столбец, если значения в другом столбце идентичны. Поэтому я пытаюсь сделать что-то подобное:

if premiumuser_id = "a value I don't know in advance" then track_id=unique

Это похоже на Создание частичного уникального индекса с sqlalchemy на Postgres, но я использую sqlite (где частичные индексы также должны быть возможно: https://docs.sqlalchemy.org/en/13/dialects/sqlite.html?highlight=partial%20indexes#partial -индекс ) и условие другое.

Пока мой код выглядит так:

class Queue(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    track_id = db.Column(db.Integer)

    premiumuser_id = db.Column(
        db.Integer, db.ForeignKey("premium_user.id"), nullable=False
    )

    __table_args__ = db.Index(
        "idx_partially_unique_track",
        "track_id",
        unique=True,
        sqlite_where="and here I'm lost",
    )

Все примеры, которые я нашел, работают с логическими или фиксированными значениями. Как должен выглядеть синтаксис для sqlite_where для условия: premiumuser_id = "значение, которое я не знаю заранее"?

...