¿Por qué Python no devolverá mi cursor de conector mysql desde una función?

Python (2.7.3) está violando mi cursor del conector mysql de alguna manera extraña cuando lo devuelvo desde una función. Este primer ejemplo funciona bien ...

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

Sin embargo, si devuelvo el cursor e intento el fetchone () (o un fetchall ()) desde el exterior, se produce una excepción ...

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

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

Lanza ...

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'

Esto a pesar del hecho de que "print type (mycursor)" imprimirá "mysql.connector.cursor.MySQLCursor"

¿Qué tipo de abuso sexual sagrado está ejecutando Python en objetos devueltos desde funciones? (Tenga en cuenta que hará esto a los cursores aprobadosdentro un módulo ... por lo tanto, no es como el objeto pasado fuera del ámbito "importar mysql.connector" ...)

Respuestas a la pregunta(2)

Su respuesta a la pregunta