PythonからMySQLを操作する
構築
Python3.4とMySQL5.7を利用。
Pythonを先に入れておく。Python のバージョンは、Connectorの対応バージョンと合わせておく。
MySQLのインストール時には、rootユーザのパスワードの設定が必要。ここでは、passwordとします。
Connector
http://dev.mysql.com/downloads/connector/python/
Connector自体は、MySQLのインストーラに含まれている様子。
準備
データベースを作ります。
スタートメニューにいる”MySQL 5.7 Command Line Client - Unicode”を開いて、ログイン。
最初はこんな感じのデータベースがある。show databases;がコマンド。
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sakila | | sys | | world | +--------------------+ 6 rows in set (0.00 sec)
データベースを作ります。create database testdb;がコマンド。testdbがデータベース名。
mysql> create database testdb; Query OK, 1 row affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sakila | | sys | | testdb | | world | +--------------------+ 7 rows in set (0.00 sec)
テストコード
pythonで以下を実行
# -*- coding: utf-8 import mysql.connector config = { 'user': 'root', 'password': 'password', 'host': 'localhost', 'database':'testdb', 'charset':'utf8' } cnx = mysql.connector.connect(**config) cur = cnx.cursor(buffered=True) sql = 'DROP TABLE IF EXISTS pet;' cur.execute(sql) cnx.commit() sql = 'CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);' cur.execute(sql) cnx.commit() # select cur.execute('SELECT * FROM pet;') row = cur.fetchone() sql = 'INSERT INTO pet VALUES (%s, %s, %s, %s, %s, %s);' data= ('Puffball','Diane','hamster','f','1999-03-30',None) cur.execute(sql, data) sql = 'INSERT INTO pet VALUES (%s, %s, %s, %s, %s, %s);' data= ('Puffball','Diane','hamster','m','1999-03-30',None) cur.execute(sql, data) cnx.commit() # select cur.execute('SELECT * FROM pet;') row = cur.fetchall() # 出力 for i in row: print(i) cur.close() cnx.close()
実行結果
C:\Python34>python C:\Python34\msql_test.py ('Puffball', 'Diane', 'hamster', 'f', datetime.date(1999, 3, 30), None) ('Puffball', 'Diane', 'hamster', 'm', datetime.date(1999, 3, 30), None)
MySQL 5.7 Command Line Clientでテーブル定義の情報を見てみると
mysql> describe pet; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | owner | varchar(20) | YES | | NULL | | | species | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birth | date | YES | | NULL | | | death | date | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 6 rows in set (0.00 sec)
mysql> select * from pet; +----------+-------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+-------+ | Puffball | Diane | hamster | f | 1999-03-30 | NULL | | Puffball | Diane | hamster | m | 1999-03-30 | NULL | +----------+-------+---------+------+------------+-------+ 2 rows in set (0.00 sec)