1: 2016-12-13 (火) 13:44:19 njf |
現: 2017-09-17 (日) 13:57:55 njf |
- | *インストール [#reeb0141] | + | *導入 [#reeb0141] |
| | | |
| MySQLのインストールは他にたくさん資料があるのでそちらを参照のこと。 | | MySQLのインストールは他にたくさん資料があるのでそちらを参照のこと。 |
- | Macならバイナリダウンロードしてインストール、WindowsならWAMPとかVertrigoServが楽かも。 | + | Macならbrewコマンドかバイナリダウンロードしてインストール、WindowsならWAMPとかVertrigoServが楽かもしれません。 |
| Linuxなどはパッケージ管理コマンドで簡単に入るはずです。 | | Linuxなどはパッケージ管理コマンドで簡単に入るはずです。 |
| | | |
- | インストールはpipからできます | + | 細かな管理や設定についても、かなりの分量になるのでこちらでは省略します。 |
| + | |
| + | 簡単なシステム開発だと、MySQLを利用するのはいろいろ面倒で正直割に合わず、SQLiteなどを使った方が楽です。とはいえ、SQLiteだと機能的に不満が出ることも多いのでMySQLが必要となることもあります。要件からどちらが良いかをまず見極めるのが重要です。詳しいデータベースの選び方については[[Python/データベースの選択]]を参照してください。 |
| + | |
| + | MySQLとPythonを接続するためのライブラリのインストールはpipから以下のコマンドでできます。 |
| pip install MySQL-Python | | pip install MySQL-Python |
| + | |
| + | *接続してデータを更新する [#k85dd1a0] |
| + | |
| + | データベースに接続するには「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インジェクションなどを気にしないといけない場合は、こちらの記法がおすすめです。 |
| + | |
| + | *データを取得する [#l53f6cef] |
| + | |
| + | データを取得するときには以下のようにします。 |
| + | |
| + | 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() |
| + | |
| + | こちらは特に難しいところはないと思います。 |