Зарегистрировать схему для запроса sqlalchemy в python-eve

Я пытаюсь создать конечную точку для запроса, объединяющего несколько таблиц. registerSchema принимает базовый объект sqlalchemy. Решение, которое я придумал, состояло в том, чтобы создать представление базы данных для инструкции sql и использовать модель для ссылки на представление.

Поддерживается ли это более естественно с зарегистрированной схемой? Я бы предпочел не поддерживать зависимости представлений базы данных в своих миграциях.

sql для представления данных (имена таблиц заменены надуманными примерами)

      CREATE VIEW v_user_offices AS
           SELECT b.id AS building_id,
                  b.name AS building_name,
                  o.id AS office_id,
                  o.name AS office_name,
                  uo.user_id AS user_id
           FROM buildings AS b
           INNER JOIN office_buildings AS ob
           ON ob.building_id=b.id
           INNER JOIN offices AS o
           ON o.id=ob.office_id
           INNER JOIN user_offices AS uo
           ON uo.office_id=o.id;

модель sqlalchemy:

class ViewUserOffices(CommonColumns):
    __tablename__ = 'v_user_offices'
    building_id = Column(Integer)
    building_name = Column(String)
    office_id = Column(Integer, primary_key=True)
    office_name = Column(String)
    user_id = Column(Integer)

settings.py

# The DOMAIN dict explains which resources will be available and how they will
# be accessible to the API consumer.
registerSchema('v_user_offices')(ViewUserOffices)
DOMAIN = {
    'user_offices': ViewUserOffices._eve_schema['v_user_offices']
    }

DOMAIN['user_offices'].update({
    'item_title': 'user_office',
    'item_lookup_field': 'user_id',
    'resource_methods': ['GET']
    })

person bjam    schedule 16.04.2015    source источник
comment
В настоящее время я ищу способ использовать наследование sqlalchemy для достижения этой цели - docs.sqlalchemy .org/en/latest/orm/inheritance.html , хотя меня беспокоит ограничение на обновление записей   -  person bjam    schedule 16.04.2015


Ответы (2)


Плагин sqlalchemy-eve пытается максимально приблизиться к декларативному подходу sqlalchemy. Если вы можете определить свои модели в sqlalchemy, вы сможете зарегистрировать их в python-eve.

В вашем случае ИМХО единственный разумный подход - создать представление и объявить его в sqlalchemy, как вы это сделали.

person amleczko    schedule 16.04.2015