Flask SQLAlchemy 从查询结果中的两个连接的映射实体中获取列

我有一个表格,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]和映射的 MenuOptions 属性通过the_doc[1]


有没有办法可以在不使用外键或ForeignKeyConstraint我的模型中的任何外键的情况下,将此关系作为单个查询对象返回,其中包含所有属性?我试过了add_columns,add_entity但得到的结果基本相同。


DIEA
浏览 269回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python