簡體   English   中英

如何將查詢結果格式化為我的擴展字典 object?

[英]How to format query results into my extended dictionary object?

我有 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。

對於查詢中的每一行,如果問題已經作為鍵存在,則 go 將值 MyQuestion object 和 append 的答案 MyQuestion['answer']。 否則,使用新的 MyQuestion object 將問題添加為鍵。

返回 MyQuestions 列表的 my_questions 字典的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM