Ad

導入 anchor.png Edit

MySQLのインストールは他にたくさん資料があるのでそちらを参照のこと。 Macならbrewコマンドかバイナリダウンロードしてインストール、WindowsならWAMPとかVertrigoServEditが楽かもしれません。 Linuxなどはパッケージ管理コマンドで簡単に入るはずです。

細かな管理や設定についても、かなりの分量になるのでこちらでは省略します。

簡単なシステム開発だと、MySQLを利用するのはいろいろ面倒で正直割に合わず、SQLiteなどを使った方が楽です。とはいえ、SQLiteだと機能的に不満が出ることも多いのでMySQLが必要となることもあります。要件からどちらが良いかをまず見極めるのが重要です。詳しいデータベースの選び方についてはPython​/データベースの選択を参照してください。

MySQLとPythonを接続するためのライブラリのインストールはpipから以下のコマンドでできます。

pip install MySQL-Python
Page Top

接続してデータを更新する anchor.png Edit

データベースに接続するには「MySQLdb.connect」を使います。

例えばローカルホストにある「python_test」というデータベースに「myuser」というユーザーでパスワード「mypassword」、文字コードUTF8で接続し、「test」というテーブルにデータを追加するには、以下のようにします。

import MySQLdb

connector = MySQLdb.connect(host="localhost",db = "python_test", user="myuser", passwd="mypassword", charset="utf8")
cursor = connector.cursor()

cursor.execute(u"INSERT INTO test VALUE(1,'This is Test');")
connector.commit()
cursor.close()
connector.close()

とこのようにするとデータが一件追加されます。 「connector.commit()」を忘れてデータが追加されないというミスをやってしまいがちなので、注意してください。

ちなみにUnicode型でなくても大丈夫です。

cursor.execute("INSERT INTO test VALUE(1,'これはテスト');")

でもマルチバイト文字を使うならUnicode型を使っておいた方が安心です。

もしマルチバイト文字を使って

_mysql_exceptions.OperationalError: (1366, "Incorrect string value: '\\xE3\\x81\\x93\\xE3\\x82\\x8C...' for column 'data' at row 1")

というようなエラーが出る場合は、MySQLのテーブル定義がUTF8になっていないので以下のSQLでテーブルのコード設定を変えるとうまくいきます。

ALTER TABLE test convert to CHARACTER SET utf8;

「cursor.execute」の部分は以下のようにパラメータを別に書くことも出来ます。

cursor.execute(u"INSERT INTO TEST VALUE(%s,%s);",(1,u"This is Test"))

一つ目の「%s」は「%d」かと思ったけれどもなぜかエラーになり「%s」だとうまくいきます。公式サイトでも数値を「%s」で受けているので、仕様のようです。

データ中の特殊文字などはエスケープされるので、SQLインジェクションなどを気にしないといけない場合は、こちらの記法がおすすめです。

Page Top

データを取得する anchor.png Edit

データを取得するときには以下のようにします。

import MySQLdb

connector = MySQLdb.connect(host="localhost",db = "python_test", user="myuser", passwd="mypassword", charset="utf8")
cursor = connector.cursor()
cursor.execute("SELECT * FROM test;")
datas = cursor.fetchall()

for row in datas:
   print row[0],row[1]
cursor.close()
connector.close()

こちらは特に難しいところはないと思います。


Front page   Edit Freeze Diff Backup Upload Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 931, today: 1, yesterday: 0
Princeps date: 2016-12-13 (Tue) 13:44:19
Last-modified: 2017-09-17 (Sun) 05:57:55 (JST) (668d) by njf
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失


NJF