Общая поддержка частичного индекса для sqlalchemy

В соответствии с этим вопросом SQLAlchemy — SQLite для тестирования и Postgresql для разработки — Как портировать?

Я понимаю, что консенсусом (выше) является не тестировать базу данных, не используемую в производстве.

Я хочу абстрагировать поддержку частичных индексов для sqlalchemy, чтобы я мог использовать либо Postgres, либо Sqlite.

Я видел, что с PostgreSQL я могу использовать

    Index('only_one_active_invoice', 
          invoice_id, active,
          unique=True,
          postgresql_where=(active)
    ),

Но я вижу, что частичный индекс также поддерживается в sqlite https://sqlite.org/partialindex.html.

Есть ли какая-то общая поддержка частичного индекса для sqlalchemy, с которой мой модуль мог бы работать с базами данных postgres или sqlite?


person Nevermore    schedule 08.06.2017    source источник


Ответы (1)


Согласно doc, общего способа не существует.

Вы должны использовать для sqlite

idx = Index('test_idx1', tbl.c.data,
            sqlite_where=and_(tbl.c.data > 5, tbl.c.data < 10))

и для постгреса:

idx = Index('my_index', my_table.c.id, 
            postgresql_where=my_table.c.value > 10)

в вашем случае вы можете проверить движок БД и инициализировать индекс с помощью kwargs

person Andrii Gerasymchuk    schedule 21.07.2017