python中sqlalchemy查询的注册模式

2024-06-11 07:52:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为连接多个表的查询创建一个端点。registerSchema接受sqlalchemy基对象。我想出的解决方案是为sql语句创建一个数据库视图,并使用该模型引用该视图。在

注册的模式是否更支持这一点?我宁愿不在迁移中维护数据库视图依赖关系。在

dataview的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模型:

^{pr2}$

在设置.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']
    })

Tags: name视图idondomainasinneroffice
2条回答

如果我理解正确,您可以通过利用sqlalchemy relationships来定义此模式。如果UserOffices类定义了所有正确的关系,那么registerSchema应该自动处理相关对象之间的关系。如果要在响应中嵌入相关对象,只需在请求中设置embedded参数。在

如果您不想让客户机担心声明嵌入对象,那么视图是有意义的。在

sqlalchemyeve插件试图尽可能接近sqlalchemy声明性方法。如果您可以在sqlalchemy中定义模型,那么您应该能够在pythoneve中注册它们。在

在您的例子中,IMHO唯一合理的方法是创建一个视图,并像您那样在sqlalchemy中声明它。在

相关问题 更多 >