関数から返すと、Python (2.7.3) が mysql-connector カーソルに奇妙な方法で違反しています。この最初の例はうまくいきます...
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」スコープから渡されたオブジェクトとは異なります...)