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
;)
这对我来说是个头一遭的问题,真的不知道如何解决它。
我有一个简单的 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
;)