Почему Python не возвращает мой курсор-соединитель mysql из функции?
Python (2.7.3) каким-то странным образом нарушает мой курсор в MySQL-коннекторе, когда я возвращаю его из функции. Этот первый пример работает нормально ...
cnx = connect()
sql = "SELECT * FROM MyTable"
cursor = cnx.cursor()
cursor.execute(sql)
row = cursor.fetchone()
Однако, если я верну курсор и попытаюсь извлечь fetchone () (или fetchall ()) извне, он выдаст исключение ...
def run_query():
cnx = connect()
sql = "SELECT * FROM MyTable"
cursor = cnx.cursor()
cursor.execute(sql)
return cursor
mycursor = run_query()
row = mycursor.fetchone()
Это бросает ...
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'
Это несмотря на то, что «print type (mycursor)» будет печатать «mysql.connector.cursor.MySQLCursor»
Какой тип нечестивого приставания выполняет Python над объектами, возвращаемыми из функций? (Имейте в виду, что это будет делать это для пройденных курсоровв модуль ... так что это не похоже на объект, переданный из области видимости "import mysql.connector" ...)