这对我来说是第一个问题,并且真的不确定如何对其进行故障排除。
我有一个简单的Python / MySQL项目,我正在努力工作。我有一个单独的类,使用它自己的方法来处理查询数据库(使用MySQLdb)。
似乎是罪魁祸首的方法( BlogDB.get_blogs())会返回从查询中获取的数据。然后我将它分配给主脚本中的变量(因此我可以将它发送到解析器并执行我需要的所有其他操作)。问题是,只要我调用该方法(.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 Web服务器。
[编辑] 在交互模式下运行PDB时,我确认方法调用( .get_blogs())是某种方式的罪魁祸首,这里是PDB的截图会话。如果无论如何要深入研究PDB,请告诉我。名称(John Clark)没有打印在方法中(正如您从上面的代码中看到的那样,方法中的任何内容都没有设置为输出任何东西),并且它只返回到返回的一行,即该行的第4列,所以我真的不明白这个或是什么导致它 Screen capture of live PDB session
答案 0 :(得分:0)
尝试使用内置python调试器pdb。这将允许您单步执行程序并确定输出的确切位置和原因。或者如果您愿意,还有其他调试器,例如pudb,它们是可视的或具有其他功能。我认为pdb应该适合你。
在调用get_blogs()之前,请调用:
pdb.set_trace()
这将进入调试器,您可以从那里单步执行。
有关pdb的更多信息,请访问here。
答案 1 :(得分:0)
我认为它正在输出查询结果,因为您正在使用fetchall
调用。这将使查询实际执行并返回结果。我将删除fetchall
并返回光标(例如return self.cursor)。然后,当您想要输出数据时,请使用fetchall
;)