私の知る限り、問題なく MySQL Connector/Python (v1.2.3) モジュールをインストールしました。これは、Python 2.7.7 を使用する CentOS 5.4 上にあります (Anaconda ディストリビューションですが、バニラ インストールでも同じことが起こります)。それをインポートして、MySQL サーバー (v4.1.20) との接続を初期化できます。このサーバーは、ローカルではなく LAN 経由でアクセスされます。メソッドは、is_connected()
適切に接続されていることをアサートします
>>> import mysql.connector
>>> cnx = mysql.connector.connect(<MySQL database information here>)
>>> cursor = cnx.cursor()
>>> cnx.is_connected()
True
ただし、SQL クエリを実行しようとすると、カーソル コマンドを介して直接 (例: cursor.execute("SELECT DATABASE();")
)、または mysql.connector メソッドを介して間接的に (例: get_database()
)、次のような同じエラーが発生します。
>>> cnx.get_database()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/bgrande/software/genesis/anaconda-2.0.1/lib/python2.7/site-packages/mysql/connector/connection.py", line 1200, in get_database
return self._info_query("SELECT DATABASE()")[0]
File "/home/bgrande/software/genesis/anaconda-2.0.1/lib/python2.7/site-packages/mysql/connector/connection.py", line 1434, in _info_query
cursor.execute(query)
File "/home/bgrande/software/genesis/anaconda-2.0.1/lib/python2.7/site-packages/mysql/connector/cursor.py", line 494, in execute
self._handle_result(self._connection.cmd_query(stmt))
File "/home/bgrande/software/genesis/anaconda-2.0.1/lib/python2.7/site-packages/mysql/connector/connection.py", line 683, in cmd_query
statement))
File "/home/bgrande/software/genesis/anaconda-2.0.1/lib/python2.7/site-packages/mysql/connector/connection.py", line 612, in _handle_result
eof = self._handle_eof(self._socket.recv())
File "/home/bgrande/software/genesis/anaconda-2.0.1/lib/python2.7/site-packages/mysql/connector/connection.py", line 554, in _handle_eof
eof = self._protocol.parse_eof(packet)
File "/home/bgrande/software/genesis/anaconda-2.0.1/lib/python2.7/site-packages/mysql/connector/protocol.py", line 252, in parse_eof
raise errors.InterfaceError(err_msg)
mysql.connector.errors.InterfaceError: Failed parsing EOF packet.
この後、MySQL サーバーとの接続が失われたようです。もう一度実行しようとするとget_database()
、次のエラーが返されます。
>>> cnx.get_database()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/bgrande/software/genesis/anaconda-2.0.1/lib/python2.7/site-packages/mysql/connector/connection.py", line 1200, in get_database
return self._info_query("SELECT DATABASE()")[0]
File "/home/bgrande/software/genesis/anaconda-2.0.1/lib/python2.7/site-packages/mysql/connector/connection.py", line 1433, in _info_query
cursor = self.cursor(buffered=True)
File "/home/bgrande/software/genesis/anaconda-2.0.1/lib/python2.7/site-packages/mysql/connector/connection.py", line 1328, in cursor
raise errors.OperationalError("MySQL Connection not available.")
mysql.connector.errors.OperationalError: MySQL Connection not available.
これはis_connected()
メソッドによって確認されます。
>>> cnx.is_connected()
False
さらに、同様の設定 (CentOS 5.5; Python 2.7.6) を備えたこの LAN 上の別のコンピューターで、MySQLdb モジュールを使用してデータベースと対話することに成功したことにも言及する必要があります。それでも、mysql.connector モジュールを使用したまったく同じ Python インストールはできません (同じエラーのため)。ここに記載されている最初のコンピューターに MySQLdb をインストールしようとしましたが、問題が発生しました。MySQL Connector/Python の方がはるかに簡単に機能すると思いました。
私の環境にもよると思いますので再現は難しいと思います。それにもかかわらず、問題がどこにあるのかを絞り込むために実行できる手順についての指針をいただければ幸いです。ありがとう!