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)
Опубликовано
14.03.2016