Python3.3 MySQLConnector/Python MySQLに接続 | パークのソフトウエア開発者ブログ|ICT技術(Java・Android・iPhone・C・Ruby)なら株式会社パークにお任せください

パークのソフトウエア開発者ブログ|ICT技術(Java・Android・iPhone・C・Ruby)なら株式会社パークにお任せください

開発の解決方法や新しい手法の情報を、パークのエンジニアが提供します。パークのエンジニアが必要な場合は、ぜひお気軽にお問い合わせ下さい。 株式会社パーク:http://www.pa-rk.co.jp/

Python勉強中のパク太郎です。

以前の記事で、Python3.3でMySQLに接続する準備が出来ましたので、
今回は、実際にPython3.3でMySQLに接続を行いたいと思います。

接続を行う前に、DB、ユーザー、テーブルの作成を行います。

まず、MySQLを使用するために、下記コマンドを実行します。

>mysql -u root -p

パスワードを求められるので、rootユーザーのパスワードを入力します。

MySQLにアクセス出来たので、まずDBを作成します。

今回はpracticeと言うDBを作成しました。

CREATE DATABASE practice CHARACTER SET utf8;


次に、DBにアクセスできるユーザーを作成します。

今回はpakuというユーザーをパスワードpakuで作成します。

アクセス出来るテーブルはDB:practiceの全てのテーブルとします。


GRANT ALL PRIVILEGES ON practice.* TO paku IDENTIFIED BY 'paku' WITH GRANT OPTION;


次に、DB:practiceにテーブルを作成します。
今回はユーザーID,ユーザー名,パスワードをカラムに持つテーブルを作成しました。

USE practice
CREATE TABLE account (user_id int unique, user_name char(16), user_passwd char(41) );


これでテーブルが出来たため、
MySQL Connector/Pythonを使用してPythonからテーブルに対して操作を行います。
操作を行うためのクラスを作成しました。
コードは下記のようになります。
コードをaccountdao.pyという名前で保存します。

import mysql.connector


class AccountDao():
    insert_str = "INSERT INTO account (user_name, user_id, user_passwd) VALUES ('{0}', '{1}', '{2}')"
    delete_ser = "DELETE FROM account WHERE user_id='{0}'"
    select_str = "SELECT {0} FROM account WHERE user_id='{1}'"
    def __init__(self, host_name, db_name, user_name, user_passwd):
        self.host_name = host_name
        self.db_name = db_name
        self.user_name = user_name
        self.user_passwd = user_passwd


    def insert(self, user_name, user_id, user_passwd):
        try:
            con_obj = mysql.connector.connect(host=self.host_name,
                                              database=self.db_name,
                                              user=self.user_name,
                                              password=self.user_passwd)
            con_cursor = con_obj.cursor()
            try:
                con_cursor.execute(self.insert_str.format(user_name, user_id, user_passwd))
                con_obj.commit()
            finally:
                con_cursor.close()
        finally:
            con_obj.close()


    def delete(self, user_id):
        try:
            con_obj = mysql.connector.connect(host=self.host_name,
                                              database=self.db_name,
                                              user=self.user_name,
                                              password=self.user_passwd)
            con_cursor = con_obj.cursor()
            try:
                con_cursor.execute(self.delete_ser.format(user_id))
                con_obj.commit()
            finally:
                con_cursor.close()
        finally:
            con_obj.close()


    def select(self, user_id, column=None):
        ret = None
        try:
            con_obj = mysql.connector.connect(host=self.host_name,
                                              database=self.db_name,
                                              user=self.user_name,
                                              password=self.user_passwd)
            con_cursor = con_obj.cursor()
            try:
                if column == None:
                    con_cursor.execute(self.select_str.format( "*", user_id))
                else:
                    con_cursor.execute(self.select_str.format( column, user_id))
                ret = con_cursor.fetchall()
            finally:
                con_cursor.close()
        finally:
            con_obj.close()


        return ret


実際に、AccountDaoクラスを用いてテーブルの操作をしてみます。
コマンドライン上で、accountdao.pyがあるディレクトリに移動し下記コマンドを実行します。

>python


Pythonの対話型シェルが起動するため、下記コマンドを打ち込みます。

import accountdao
import hashlib
account_dao = accountdao.AccountDao( 'localhost', 'practice', 'paku', 'paku' )
account_dao.insert('test', 'test', hashlib.sha1('test'.encode(encoding='utf_8', errors='strict')).hexdigest())

ユーザー名:test
ユーザーID:test
パスワード:test
というアカウントを追加しました。
パスワードはSHA1で暗号化しています。

正常に動いているか、MySQLで確認してみます。
MySQLにアクセスし、下記コマンドを打ち込みます。


SELECT * FROM account;


ユーザー名:test
ユーザーID:test
のユーザーが表示されれば成功です。

次に、selectメソッドの確認です。
対話型シェルで下記コマンドを打ち込みます。

rows = account_dao.select('test')
for row in rows
    for data in row
        print(data)



下記内容が表示されれば成功です。

test
test
*************

*************の部分は暗号化された文字列

次に、deleteメソッドの確認です。
対話型シェルで下記コマンドを打ち込みます

account_dao.delete("test")


MySQLにアクセスし、下記コマンドを打ち込みます。


SELECT * FROM account;


ユーザーID:test
のユーザーが表示されなくなっていれば成功です。

これで、MySQLConnector/Pythonを使用してMySQLにアクセスできることが確認できました。