Symfoware

Symfowareについての考察blog

MariaDB 5.5にUbuntu 12.04 + Pythonで接続する(MySQL-python使用)

FreeBSD 10.0にインストールしたMariaDB 5.5へ、
外部から接続できるようにしてみました。
MariaDB 5.5の外部接続許可

Ubuntu 12.04 + Python 2.7から接続を試してみます。



MySQL-pythonのインストール



接続には、MySQL-pythonを使用することにしました。
https://pypi.python.org/pypi/MySQL-python

MariaDBはMySQLと互換性があるので、これで問題ないはず。

まず、依存ライブラリをインストール。


$ sudo apt-get install libmysqlclient-dev



これを事前にインストールしていないと、mysql-pythonインストール時、
mysql_configがないっていうエラーで落ちます。


Downloading/unpacking mysql-python
  Downloading MySQL-python-1.2.5.zip (108Kb): 108Kb downloaded
  Running setup.py egg_info for package mysql-python
    sh: 1: mysql_config: not found
    Traceback (most recent call last):
     File "<string>", line 14, in <module>
     File "/home/baranche/build/mysql-python/setup.py", line 17, in <module>
        metadata, options = get_config()
     File "setup_posix.py", line 43, in get_config
        libs = mysql_config("libs_r")
     File "setup_posix.py", line 25, in mysql_config
        raise EnvironmentError("%s not found" % (mysql_config.path,))
    EnvironmentError: mysql_config not found
    Complete output from command python setup.py egg_info:
    sh: 1: mysql_config: not found




mysql-pythonは、pipでインストールしました。


$ sudo pip install mysql-python




import MySQLdbでエラーが発生しなければインストール成功です。


$ python
Python 2.7.3 (default, Feb 27 2014, 19:58:35)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>>






簡単なサンプル



ちゃんと接続できるか簡単なサンプルです。


  1. # -*- coding:utf-8 -*-
  2. import MySQLdb
  3. con = MySQLdb.connect(
  4.     host='192.168.1.101',
  5.     db='sample',
  6.     user='admin',
  7.     passwd='P@ssw0rd',
  8.     charset='utf8')
  9. cur = con.cursor()
  10. cur.execute(u"insert into test(id, name) values (%s, %s)", [1, u'テストデータ'])
  11. con.commit()
  12. cur.execute(u"select * from test")
  13. for row in cur:
  14.     print(u"%d, %s" % (row[0], row[1]))
  15. con.close()



charsetをちゃんと指定するのがミソ。


charset='utf8'



これを指定していないと、Pythonでよく見かけるエラーで落ちます。


UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-5: ordinal not in range(256)







結果を辞書型で取得



結果の行を辞書型で取得し、列名でアクセスしてみます。
cursorを取得するとき「MySQLdb.cursors.DictCursor」を指定すればOK。


  1. # -*- coding:utf-8 -*-
  2. import MySQLdb
  3. con = MySQLdb.connect(
  4.     host='192.168.1.101',
  5.     db='sample',
  6.     user='admin',
  7.     passwd='P@ssw0rd',
  8.     charset='utf8')
  9. cur = con.cursor(MySQLdb.cursors.DictCursor)
  10. #cur.execute(u"insert into test(id, name) values (%s, %s)", [1, u'テストデータ'])
  11. #con.commit()
  12. cur.execute(u"select * from test")
  13. for row in cur:
  14.     print(u"%s, %s" % (row['id'], row['name']))
  15. con.close()


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/03/18(火) 22:16:26|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<データベースのスキーマ変更管理ツール「alembic」の基本的な使い方 | ホーム | MariaDB 5.5の外部接続許可>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1350-dc13ac71
この記事にトラックバックする(FC2ブログユーザー)