2

我正在尝试打开一个指向 MySQL-DB 的游标。但我收到了这个错误:

'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 ... 连接已打开。

如果我在“连接”函数中创建游标和 SQL 语句,一切都运行良好。

奇怪的是,一切看起来都是正确的,对于具有相同功能的其他一些连接,一切都运行良好,也是。我不知道如何解决这个错误。我希望有人能指出我正确的方向。

4

1 回答 1

0

我会将检查连接是否打开的语句更改为检查 conn 是否为空以及连接是否打开。而且因为您总是执行该setValue函数,我建议您在__init__函数内部调用连接。

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 连接器时,您需要在执行插入或更新语句后调用 commit。

cur =  self.conn.cursor()
cur.execute("...")
self.conn.commit()
于 2013-04-24T14:51:22.347 回答