2012-08-06 208 views
2

我正在编写与MySQL数据库交互的python程序。 对于sql查询,我使用MySQLdb。 问题是fetchone()返回无,但与数据库浏览器,我可以看到 该行存在。 此段代码:cursor.fetchone()返回None,但数据库中存在行

query = "SELECT * FROM revision WHERE rev_id=%s;" 
cursor.execute(query % revision_id) 
row = cursor.fetchone() 
if row == None: 
    raise Exception("there isn't revision with id %s" % revision_id) 

我不知道这里发生了什么事。有任何想法吗?

编辑:好的,在某些情况下,它在某些情况下它不起作用,但无论如何,当它 不起作用的行在表中存在。我将光标对象传递给函数,上面的代码在函数中。问题与这个游标对象有关。可能是我将光标作为参数传递给函数的问题?如何测试它?

EDIT2:是的,光标在我多次使用后不起作用的问题。无论是因为其他程序连接到数据库还是我做错了什么。 我有while循环,我在其中调用函数来从数据库中获取信息。在一些 迭代后,它不再工作。还有另一个程序写入 DB,而while回路工作。

+1

将查询字符串(及其替代)'print'打印到屏幕上并将其复制/粘贴到'mysql'提示符中以确定。 – 2012-08-06 02:51:28

+1

更好的是,使用参数化查询而不是替代。 – 2012-08-06 02:57:05

+0

是的,查询字符串在mysql promt中正常工作 – ashim 2012-08-06 02:57:11

回答

2

好的,db.autocommit(True)解决了我的问题。

+0

'connection.commit()',在执行'(或'db.commit()'后面,具体取决于你称为你的连接)可以手动执行相同的操作。 – Mast 2017-05-30 14:41:45