python - 将平面查询结果转换为更定义的表结构

标签 python mysql

我正在使用 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 连接器或 flask 中是否已经有一些东西可以用来完成此任务?

[{
  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() function 。这将允许您从每个返回行的连接表中返回多条记录。您仍然需要进行一些格式化,但这将允许您将每个食谱作为一条记录返回,并包含其说明和成分。

您可能还想考虑使用像 records 这样的包使用它的 .as_dict() 函数可以让事情变得更容易一些。

关于python - 将平面查询结果转换为更定义的表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59385703/

相关文章:

python - 如何从 pdb 控制台进入任意生成器函数调用?

php - MySQL 和 PHP - 选择/选项列表并向用户显示仍然允许我生成查询的数据

jquery - 使用 jquery 在选择标签上显示数据库中的数据

python - 递归访问嵌套字典的路径和值

python - 删除标点符号,数字内标点符号除外

python - 在 Python 中以特定格式从嵌套 JSON 对象中提取数据

python - None 背后的概念是什么?

通过 Flash AS3 的 php INSERT 有时会插入奇怪的字符串

mysql - 使用一个 SQL 更新多行

php - 如何使用 MySQL 记录 id 来命名图像?