有人能帮我完成以下代码吗?我有130多条记录,使用fetchall()
可以得到所有记录,这使得数据无法读取。相反,我希望一次获取10条记录(例如使用Enter键)。在
这是我的代码:
def getAllPerguntasDB(self):
query = "SELECT p.id_pergunta,t.tema,d.grau,p.pergunta,p.op1,p.op2,p.op3,p.op4,p.correto FROM perguntas AS p INNER JOIN temas AS t ON (p.id_tema = t.id_tema) INNER JOIN dificuldade AS d ON (p.id_grau = d.id_grau) ORDER BY t.tema, d.grau ASC;"
self.cur.execute(query)
self.result = self.cur.fetchall()
for row in self.result:
id_pergunta = row[0]
tema = row[1]
grau = row[2]
pergunta = row[3]
op1 = row[4]
op2 = row[5]
op3 = row[6]
op4 = row[7]
correto= row[8]
print('---------------------------------------------------------------------------------------')
print("id: ", id_pergunta)
print("Tema:",tema,"\tGrau:",grau)
print("Pergunta: ", pergunta)
print("Opção 1: ", op1, "\tOpção 2: ", op2, "\tOpção 3: ", op3, "\tOpção 4: ", op4)
print("Resposta Correta: ", correto)
print('---------------------------------------------------------------------------------------')
最简单的方法可能是使用
enumerate
计算结果,并使用模运算符%
每10行显示一条input
行或类似的行。在注意:如果你有10个结果的倍数,这将显示一个额外的“点击回车”行。要解决此问题,您可以使用上述方法的细微变化:
^{pr2}$我以前没有在Python中使用过任何类型的数据库查询,但我将其简单地视为在固定大小的块中生成数据序列的问题,在块之间等待用户输入。在
在这里使用生成器的好处是,如果数据库结果(即
self.cur.fetchall()
的输出)也是延迟生成的,则它可能允许程序更有效地运行;除非用户特别请求(通过点击Enter足够多次),否则不会计算所有数据库结果。请注意,我不能保证这是因为我不知道fetchall
是如何工作的。在批处理逻辑来自tobias_k的解here。避免打印最后“按enter”消息的方法也是基于他对您的问题here的解决方案。在
在下面的代码中,我用0到29的固定值范围模拟数据库结果。但是,您应该能够调整它的操作原理,以便与从数据库中提取的数据一起使用。在
输出
^{pr2}$相关问题 更多 >
编程相关推荐