Я пытаюсь создать конечную точку для запроса, объединяющего несколько таблиц. 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']
})