首页 > 解决方案 > Flask/Python 中的 SQL:不同的值?

问题描述

我有一个规范化的数据库,我创建了一个查询来选择口袋妖怪的类型。

SELECT pokedata.name, poketypes.type
FROM pokedata
LEFT JOIN poketypes
ON pokedata.pokeID = poketypes.pokeID

输出

+-----------+--------+
|   Name    |  Type  |
+-----------+--------+
| Bulbasaur | grass  |
| Bulbasaur | poison |
| Ivysaur   | grass  |
| Ivysaur   | poison |
| Venusaur  | grass  |
| Venusaur  | poison |
+-----------+--------+

但是,在 Flask 或 Python 中,我不确定如何在不重复名称值的情况下获取并使用此查询。

这是我目前拥有的:

口袋妖怪.py

pokemon = conn.execute("SELECT p.name, poketypes.type FROM pokedata AS p LEFT JOIN poketypes ON p.pokeID = poketypes.pokeID")
return render_template('index.html', pokemon=pokemon)

索引.html

      {% for row in pokemon %}  
       {{ row['name'] }} has types {{ row['type'] }} 
      {% endfor %}

Output
Bulbasaur has types grass 
Bulbasaur has types poison

这是我希望输出的内容(我假设我需要一个循环,但我不确定如何实现它)

Bulbasaur has types grass, poison
Ivysaur has types grass, poison

(我不确定什么标题有意义 - 请随意提出更好的标题!)

标签: pythonsqlite

解决方案


使用默认字典

from collections import defaultdict
rows=[['Bulbasaur','grass'],
['Bulbasaur','poison '],
['Ivysaur','grass']
]
d=defaultdict(list)
for row in rows:
    d[row[0]].append(row[1])

for k,v in d.items()    :
    print(f"{k} has types {', '.join(v)} ")

Bulbasaur 有草类、毒类

常春藤有草种


推荐阅读