【问题标题】:How to use Explain command using Python Mysql connection?如何使用 Python Mysql 连接使用 Explain 命令?
【发布时间】:2019-06-29 12:06:48
【问题描述】:

解释方法/命令似乎不适用于 python mysql 连接。其他查询显示正确的结果,但使用说明命令没有显示任何内容。代码打印和 cmets 是 int 葡萄牙语。我正在使用 DataFrames 显示查询结果的内容以显示问题/错误/其他。代码是缩进的,因为它刚刚从 Visual Studio 中出来。我用谷歌搜索了很多,没有找到任何线索。

            print("#########################################################################################")
            # ANTES DE EXECUTAR CADA UMA DAS QUERYS VEREFICAR QUAIS AS TABELAS QUE SAO UTLIZADAS EM CADA UMA
            # VERIFICAR QUE TABELAS EXISTEM PARA O PROFESSOR
            query = "EXPLAIN " + sqlqueryprof
            print("QUERY EXPLAIN DO PROFESSOR")
            print(query)
            #connection.commit()
            cursor = connection.cursor()
            cursor.execute(query)
            explain_prof = cur.fetchall()
            print("TABELA EXPLICATIVA DA QUERY DO PROFESSOR")
            data_frame_expl_prof = pandas.DataFrame(list(explain_prof))
            print(data_frame_expl_prof)

            # VERIFICAR QUE TABELAS EXISTEM PARA O ALUNO
            query = "EXPLAIN " + sqlqueryalun
            print("QUERY EXPLAIN DO ALUNO")
            print(query)
            #connection.commit()
            cursor = connection.cursor()
            cursor.execute(query)
            explain_alun = cur.fetchall()
            print("TABELA EXPLICATIVA DA QUERY DO ALUNO")
            data_frame_expl_alun = pandas.DataFrame(list(explain_alun))
            print(data_frame_expl_alun)

            print("#################################################################")
            # EXECUTAR CADA UMA DAS QUERYS
            cursor_prof = connection.cursor()
            cursor_prof.execute(sqlqueryprof)
            records_prof = cursor_prof.fetchall()

            data_frame_prof = pandas.DataFrame(list(records_prof))
            print("IMPRIMIR O DATA FRAME RESULTANTE DO PROFESSOR A CONEXAO")
            print(data_frame_prof)

            cursor_alun = connection.cursor()
            cursor_alun.execute(sqlqueryalun)
            records_query = cursor_alun.fetchall()

            data_frame_alun = pandas.DataFrame(list(records_query))
            print("IMPRIMIR O DATA FRAME RESULTANTE DO ALUNO A CONEXAO")
            print(data_frame_alun)

【问题讨论】:

  • 为什么用DataFrame来显示EXPLAIN的结果?
  • 它可能是任何其他结构。只要它当时适用于其他查询,我就会尝试使用 EXPLAIN sql 命令使其在终端中显示... @Lucas
  • 我已经在我这边进行了测试,它按预期工作(即使使用pandas.DataFrame)。您是否尝试过打印您的fetchall 的输出?它们是空的吗?如果是这样,您的查询很可能没有返回任何内容。
  • 是的,这就是@Lucas。 Fetchall 返回空。如您所见,我只是将“EXPLAIN”添加到查询字符串中。他们自己的查询正在返回一些东西。当我把解释 -> 空结果...

标签: mysql python-3.x flask


【解决方案1】:

可能是因为您使用了cur.fetchall() 而不是cursor.fetchall()?

[...]
cursor = connection.cursor()
cursor.execute(query)
explain_prof = cursor.fetchall()
[...]

【讨论】:

  • 真的很感谢@Lucas,但没有。 cur = mysql.connection.cursor() connection = MySQLdb.connect(host='localhost', database='jg_teste', user='root', password='xxxx') cursor = connection.cursor() 实际上我正在使用两个数据库...但没有混淆...谢谢
  • 虽然值得一试;)
  • 完整代码在这里:GitHub@Lucas 正如我告诉你的那样,cur 和 cursor 是不同的东西......
  • 当然,它们是两种不同的东西,就是这样!您不能随时使用其中任何一个。在您的情况下,您执行cursor.execute(query),因此您必须调用cursor.fetchall() 来获取结果,而不是cur.fetchall()。
  • 你说的那样...我刚开始怀疑 explain 命令是否不允许通过 python 连接器
猜你喜欢
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 2020-05-20
  • 2015-06-17
  • 2021-11-25
  • 1970-01-01
相关资源
最近更新 更多