我试图打开一个指向MySQL数据库的游标。但我有个错误:

'NoneType' object has no attribute 'cursor'

这是一个小的源代码:
class Sample:
  def __init__(self):
    self.conn = None
    self.value = self.setValue()

  def connect(self):
    self.conn = MySQLdb.connect(...)
    #cursor = self.conn.cursor()
    #cursor.execute("SELECT ...")
    #value = str(cursor.fetchone()[0])
    #raise Exception(value)
    #cursor.close() <- here everything is working fine

  def setValue(self):
    if (self.conn == None):
    self.connect()
    #raise Exception(self.conn.open)
    cursor = self.conn.cursor() # ERROR: 'NoneType' object has no attribute 'cursor'
    ...

如果我使用例外我得到1。。。连接已打开。
如果我在'connect'函数中创建游标和SQL语句,一切都会正常工作。
奇怪的是,这一切看起来都是正确的,对于其他一些具有相同功能的连接,一切都工作得很好。我不知道如何解决这个错误。我希望有人能给我指出正确的方向。

最佳答案

我将更改检查连接是否打开的语句,同时检查conn是否为none以及连接是否打开。因为您总是执行setValue函数,所以我建议您在__init__函数中调用connect。

class Sample:
  conn = None

  def __init__(self):
    self.connect()
    self.value = self.setValue()
    self.close()

  def connect(self):
    self.conn = MySQLdb.connect(...)

  def close(self):
    if self.conn:
       self.conn.close()

  def setValue(self):
    if not self.conn and not self.conn.open:
       self.connect()
    cursor = self.conn.cursor()

另外,请记住,使用Python MySQL连接器,您需要在执行insert或update语句之后调用commit。
cur =  self.conn.cursor()
cur.execute("...")
self.conn.commit()

关于python - Python:MySQL连接已打开,但无法创建游标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16195118/

10-15 22:50