我试图为连接多个表的查询创建一个端点。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']
})
如果我理解正确,您可以通过利用sqlalchemy relationships来定义此模式。如果UserOffices类定义了所有正确的关系,那么registerSchema应该自动处理相关对象之间的关系。如果要在响应中嵌入相关对象,只需在请求中设置
embedded
参数。在如果您不想让客户机担心声明嵌入对象,那么视图是有意义的。在
sqlalchemyeve插件试图尽可能接近sqlalchemy声明性方法。如果您可以在sqlalchemy中定义模型,那么您应该能够在pythoneve中注册它们。在
在您的例子中,IMHO唯一合理的方法是创建一个视图,并像您那样在sqlalchemy中声明它。在
相关问题 更多 >
编程相关推荐