将平面查询结果转换为更明确的表结构



我正在使用flask和mysql为我的一个简单的应用程序创建一个API。我不太确定如何将联接在具有一对多关系的表上的平面查询结果转换为表结构化的 json 对象。

下面是我要执行的查询的示例。每个食谱可能有很多方向和许多成分。

SELECT r.id
, r.name
, r.description
, rd.text
, ri.name
, ri.amount
FROM recipes r 
LEFT JOIN recipe_directions rd ON rd.recipe_id = r.id
LEFT JOIN recipe_ingredients ri ON ri.recipe_id = r.id

我想将此查询的平面结果转换为如下所示的 json 对象。mysql 连接器或烧瓶中是否已经烘焙了一些东西,我可以利用这些东西来完成此操作?

[{
id: 1,
name: 'Recipe 1',
description: '...',
directions: [{
text: 'Cook the rice'
},
{
text: 'Do the next step...'
}],
ingredients: [{
name: 'Rice',
amount: '1 cup'
},
{ 
name: 'Onion',
amount: '1'  
}]
},
{
id: 2,
name: 'Recipe 2',
description: '...',
directions: [...]
ingredients: [...]
}]

你要找的是GROUP_CONCAT()函数。这将允许您从每个返回行中的联接表中返回多条记录。您仍然需要进行一些格式化,但这可以让您将每个食谱作为一条记录返回,其中包含其说明和成分。

您可能还需要考虑使用像记录这样的包及其.as_dict()功能,以使自己的事情变得更容易一些。

最新更新