Warum gibt Python meinen MySQL-Connector-Cursor nicht von einer Funktion zurück?

Python (2.7.3) verletzt auf seltsame Weise meinen Mysql-Connector-Cursor, wenn ich ihn von einer Funktion zurückgebe. Dieses erste Beispiel funktioniert gut ...

cnx = connect()
sql = "SELECT * FROM MyTable"
cursor = cnx.cursor()
cursor.execute(sql)
row = cursor.fetchone()

Wenn ich jedoch den Cursor zurückbringe und versuche, fetchone () (oder fetchall ()) von außen zu verwenden, wird eine Ausnahme ausgelöst ...

def run_query():
    cnx = connect()
    sql = "SELECT * FROM MyTable"
    cursor = cnx.cursor()
    cursor.execute(sql)
    return cursor

mycursor = run_query()
row = mycursor.fetchone()

Es wirft ...

File "/usr/lib/pymodules/python2.7/mysql/connector/cursor.py", line 533, in fetchone
  row = self._fetch_row()
File "/usr/lib/pymodules/python2.7/mysql/connector/cursor.py", line 508, in _fetch_row
  (row, eof) = self.db().protocol.get_row()
AttributeError: 'NoneType' object has no attribute 'protocol'

Dies trotz der Tatsache, dass "print type (mycursor)" "mysql.connector.cursor.MySQLCursor" ausgibt.

Welche Art von unheiligem Missbrauch führt Python an Objekten durch, die von Funktionen zurückgegeben wurden? (Beachten Sie, dass dies bei übergebenen Cursorn der Fall istinnerhalb ein Modul ... es ist also nicht so, als ob das Objekt aus dem Gültigkeitsbereich "Import mysql.connector" übergeben würde ...)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage