Python 正在输出从方法返回的 MySQL 数据

Python outputting MySQL data returned from method

这对我来说是个头一遭的问题,真的不知道如何解决它。

我有一个简单的 Python/MySQL 项目,我正在做这个项目只是为了好玩。我有一个单独的 class,它有自己的方法来处理查询数据库(使用 MySQLdb)。

似乎是罪魁祸首的方法 (BlogDB.get_blogs()) returns 从查询中获取的数据。然后我将它分配给主脚本中的一个变量(这样我就可以将它发送到解析器并用它做我需要做的一切)。问题是,一旦我调用该方法 (.get_blogs()),它就会从查询结果中输出一个字段,即使我没有设置任何输出。我试过不将它分配给变量,只是 运行 方法,它仍然做同样的事情,而且它总是同一个字段。

我错过了什么,有人可以给我指明方向吗?这个方法太短了,我不知道发生了什么。

主文件,调用其他所有内容并将它们联系在一起:

#!/usr/bin/python
print "Content-type: text/html\n\n"

import blog_db
bdb = blog_db.BlogDB()
bdb.get_blogs()
db.close_db()

这是带有方法的 blog_db 模块,尽管只有 .get_blogs() 方法会导致问题(如果我将其注释掉则不会出现问题):

#!/usr/bin/python

import MySQLdb
class BlogDB():
    def __init__(self):
        db = MySQLdb.connect("mysql.server","user","pass","table" )
        self.cursor = db.cursor()


    def get_blogs(self):
        self.cursor.execute("SELECT * from lt_blog ORDER BY id DESC LIMIT 5;")
        data = self.cursor.fetchall()
        return data

    def close_db(self):
        db.close()

这个真的是一头雾水,希望有人遇到过这样的事情。

使用 Python 2.7 和 MySQL 5.3,不知道哪个版本的 MySQLdb,Linux Debian 和 Apache 网络服务器。

[编辑] 当 运行 PDB 处于交互模式时,我确认方法调用 (.get_blogs()) 不知何故是罪魁祸首,这是 PDB 会话的屏幕截图。如果无论如何要深入研究 PDB,请告诉我。名称 (John Clark) 未打印在方法中(正如您从上面的代码中看到的,方法中没有任何内容设置为输出任何内容),并且它仅出现在返回的行之一中,即该行的第 4 列,所以我真的不明白这是什么原因造成的。
Screen capture of live PDB session

尝试使用内置 python 调试器 pdb。这将允许您单步执行程序并找出输出发生的确切位置和原因。或者,如果您愿意,还有其他可视化或具有其他功能的调试器,例如 pudb。我认为 pdb 应该适合你。

在调用 get_blogs() 之前,调用:

pdb.set_trace()

这将进入调试器,您可以从那里单步执行。

可以找到有关 pdb 的更多信息 here

我认为它正在输出查询结果,因为您正在使用 fetchall 调用。这将使查询实际执行并 return 结果。我会删除 fetchall 和 return 光标(例如 return self.cursor)。然后当你想输出数据时,使用 fetchall ;)