【发布时间】:2020-08-17 08:48:54
【问题描述】:
我正在用 Python 3 构建一个测验应用程序。用户会看到一堆线索,他们必须猜测体育明星。我当前的后端使用的是 SQLite,但是我想拥有一个使用 Firebase 的实时数据库,因此需要将其更改为 JSON 格式。
当前表格如下所示:
Player Name Difficulty Year Club Apps (Goals)
player_1 easy 2014 - 2017 club x (y)
player_1 easy 2017 - 2019 club_2 x (y)
player_2 medium 2019 - club x (y)
目前,用户选择难度。然后我运行一个 SQL 查询,它给了我所有有该困难的玩家的列表。然后,应用程序会向用户显示最后三列,这是他们需要用来猜测玩家的线索。
为了输入 JSON 格式,我想它看起来像这样
{
"users":
{
"player_1_id":
{
"name": "player_1",
"difficulty": "difficulty",
"year": [year_1, year_2, ..., year_n],
"club": [club_in_year_1, club_in_year_2, ...., club_in_year_n],
"apps": [apps_in_year_1, apps_in_year_2, ..., apps_in_year_n]
},
"player_2_id":
"name": "player_2",
...
}
}
因此,在每个年份/俱乐部/应用列表中,每个球员姓名可以有不同数量的值。我创建并运行了以下代码:
import sqlite3
def dict_factory(cursor, row):
d = {}
for idx, col in enumerate(cursor.description):
d[col[0]] = row[idx]
return d
connection = sqlite3.connect("player_database.db")
connection.row_factory = dict_factory
cursor = connection.cursor()
cursor.execute("select * from player_history")
results = cursor.fetchall()
print(results)
connection.close()
但这会使用单独的 ID 打印每个新行,这不是我想要的。
如何编辑它以获得我想要的输出?
【问题讨论】:
-
实际上没有其他方法可以从 SQL 中获取它。你可以聚合这些值,但你不会得到一个真正的数组。否则,您现在必须获取结果行并将其更改为您的需要。你可以使用循环和变量来得到你想要的。
-
使用按用户键控字典自行汇总结果,该字典本身包含字典和列表,具体取决于您希望如何按每个用户组织数据。然后,您可以使用
json库写出 JSON 格式的字符串。
标签: python json python-3.x sqlite