python - 如何将查询结果格式化为我的扩展字典对象?
问题描述
我有 SQL 表:
问题
q_id (PK) | 用户ID(FK用户(用户ID)) | 问题 |
---|---|---|
1 | 111 | “1到4之间是什么?” |
2 | 222 | “5到7之间是什么?” |
回答
a_id (PK) | q_id(FK 问题(q_id)) | 回答 |
---|---|---|
1 | 1 | '2' |
2 | 1 | '3' |
3 | 2 | '6' |
在 Python 中,我扩展了 dict 以便它具有预定义的问题和答案键:
class MyQuestion(dict):
def __init__(self, question, answers):
self['question'] = question
self['answers'] = answers
我的目标是最终得到一个 MyQuestion 对象列表(question_list)。目前我正在做这样的事情并且它有效:
question_list = []
cursor.execute("SELECT q_id, question FROM question WHERE user_id =(%s)", userID)
result = cursor.fetchall()
for question in result:
cursor.execute("SELECT answer FROM answers WHERE q_id = (%s)", question[0])
answers = cursor.fetchall()
question_list.append(MyQuestion( question[1], answers ) )
我想对此进行修改,以便只需要进行一个查询。因此,我创建了一个查询,可以获取用户提出的每个问题的所有答案,并且我想要与上述相同的结果。
SELECT answer.answer, question.question
FROM answer
Left JOIN question on answer.q_id=question.q_id
WHERE question.user_id = (%s), userID)
如何格式化我的 MyQuestions 对象列表的结果?
解决方案
cursor.execute("SELECT answer.answer, question.question FROM answer Left JOIN question on answer.q_id=question.q_id WHERE question.user_id = (%s)", userID)
result = cursor.fetchall()
question_list = []
my_questions = {}
for answer in result:
if answer[1] in my_questions.keys():
my_questions[answer[1]]['answers'].append(answer[0])
else:
my_questions[answer[1]] = MyQuestion(answer[1], [answer[0]])
question_list = my_questions.value()
使用连接查询进行查询后,使用问题字符串作为键将结果组织到字典中。键也可以是 q_id。
对于查询中的每一行,如果问题已经作为键存在,则转到值 MyQuestion 对象并将答案附加到 MyQuestion['answer']。否则,将问题添加为具有新 MyQuestion 对象的键。
返回 MyQuestions 列表的 my_questions 字典的值。
推荐阅读
- if-statement - 带有检索和变量的 sparql 查询 if 语句
- php - 如何将图像名称保存在数据库中以便以后查看?
- excel - 删除 VBA 工作表中提到的多个变量列
- php - 在验证用户与 Symfony 4 和 FOSUserBundle 连接后重定向用户
- jsf - ui:repeat 中的复合组件:如何正确保存组件状态
- sql - SQL WHERE 子句从多个列中过滤
- java - 如何从java中的字节数组中获取整数数组并打印输出数组?字节数组来自 225*225 维度的灰度图像
- python - 未找到文件 (.json)
- reactjs - 我对 ReactJs 还很陌生,我正在尝试渲染用户选择的图像文件。但我失败得很惨
- rest - 网络服务健康检查 URL 和行为