in_() not yet supported for relationships.

Небольшая заметка о способе решения.

В одном питоновском скрипте, завязанном на использование SQLAlchemy, потребовалось реализовать отбор по набору значений в связанных данных. Сперва на ум конечно пришло использовать in_, однако тут я столкнулся с неприятностью в виде:

NotImplementedError: in_() not yet supported for relationships. For a simple many-to-one, use in_() against the set of foreign key values

Т.е. возможность использовать in_, на данный момент, отсутствует в orm. Для обхода этого ограничения использовал or_ вкупе с генератором:

from sqlalchemy.sql import or_
def elder_publication(self):
    vids = {
        'this_is_first_vid' : 1,
        'this_is_second_vid' : 2
    }
    # хитрожопая реализация in_ для связанных полей
    cond = or_( * [ old.publication._node_category_.has(value=vid) for vid in vids.values() ] )
    return self.db.fm().query(old.publication).filter(cond)

Комментарии

comments powered by Disqus
Яндекс.Метрика