У меня есть таблица, MenuOptions
, которая представляет любую опцию, найденную в раскрывающемся списке в моем приложении. Каждый параметр можно определить по меню, частью которого он является (например, MenuOptions.menu_name
), и по конкретному значению этого параметра (MenuOptions.option_value
).
Эта таблица имеет отношения по всей моей БД и не использует внешние ключи, поэтому у меня возникли проблемы с ее преобразованием в SQLAlchemy.
В SQL это будет так же просто, как:
SELECT
*
FROM
document
JOIN
menu_options ON menu_options.option_menu_name = 'document_type'
AND menu_options.option_value = document.document_type_id
чтобы определить это отношение. Однако, когда я делаю это в SQLAlchemy, у меня возникают проблемы, потому что я не могу четко отобразить это отношение без внешних ключей. В SQLAlchemy лучшее, что я сделал на данный момент:
the_doc = db.session.query(Document, MenuOptions).filter(
Document.id == document_id
).join(
MenuOptions,
and_(
MenuOptions.menu_name == text('"document_type"'),
MenuOptions.value == Document.type_id
)
).first()
, который работает и возвращает правильные значения, но возвращает их в виде списка двух отдельных объектов модели, так что я должен ссылаться на свойства сопоставленного документа через the_doc[0]
, а свойства сопоставленного меню - через the_doc[1]
Можно ли как-нибудь вернуть это отношение как один объект запроса со всеми его свойствами без использования внешних ключей или любых ForeignKeyConstraint
в моей модели? Я пробовал add_columns
и add_entity
, но по сути получаю тот же результат.