以前の記事で、Python3.3でMySQLに接続する準備が出来ましたので、
今回は、実際にPython3.3でMySQLに接続を行いたいと思います。
接続を行う前に、DB、ユーザー、テーブルの作成を行います。
まず、MySQLを使用するために、下記コマンドを実行します。
>mysql -u root -p
パスワードを求められるので、rootユーザーのパスワードを入力します。
MySQLにアクセス出来たので、まずDBを作成します。
今回はpracticeと言うDBを作成しました。
次に、DBにアクセスできるユーザーを作成します。
今回はpakuというユーザーをパスワードpakuで作成します。
アクセス出来るテーブルはDB:practiceの全てのテーブルとします。
次に、DB:practiceにテーブルを作成します。
今回はユーザーID,ユーザー名,パスワードをカラムに持つテーブルを作成しました。
これでテーブルが出来たため、
MySQL Connector/Pythonを使用してPythonからテーブルに対して操作を行います。
操作を行うためのクラスを作成しました。
コードは下記のようになります。
コードをaccountdao.pyという名前で保存します。
実際に、AccountDaoクラスを用いてテーブルの操作をしてみます。
コマンドライン上で、accountdao.pyがあるディレクトリに移動し下記コマンドを実行します。
Pythonの対話型シェルが起動するため、下記コマンドを打ち込みます。
ユーザー名:test
ユーザーID:test
パスワード:test
というアカウントを追加しました。
パスワードはSHA1で暗号化しています。
正常に動いているか、MySQLで確認してみます。
MySQLにアクセスし、下記コマンドを打ち込みます。
ユーザー名:test
ユーザーID:test
のユーザーが表示されれば成功です。
次に、selectメソッドの確認です。
対話型シェルで下記コマンドを打ち込みます。
下記内容が表示されれば成功です。
*************の部分は暗号化された文字列
次に、deleteメソッドの確認です。
対話型シェルで下記コマンドを打ち込みます
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にアクセスできることが確認できました。