[MySQL][phpmyadmin][PyMySQL]ConoHa WINGのデータベースをいろんな方法で弄る

レンタルサーバーConoHa WINGの契約と、ConoHa WINGでデータベースを作成した話は以下の記事を参照。

今日はこれらの記事の作業の続きに当たる、データベースを活用する部分について記していく。

ConoHa WINGにSSH接続してコマンドラインからMySQLを操作する

ConoHa WINGにSSH接続する(ページ上部の記事)ことで、CLIで操作ができるようになる。

せっかくなので、こちらからデータベースを操作する方法についても触れておく。

ConoHa WINGで作成したデータベースはMySQLなので、MySQLコマンドで接続できる。

SSH接続したコマンドラインから、以下のようなコマンドを入力する。(打つコマンドは”mysql”以降だ)

cXXXXXXX@webXXXX:~$ mysql -h [ホスト名] -u [ユーザー名] -p

すると、”Enter password:” と言われるので、パスワードを入力すれば接続完了だ。

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id XXXXXXX
Server version: X.X.X-log MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

このような表示が出ればよい。

ここで、「ホスト名」と「ユーザー名」、「パスワード」は作成したデータベースのものを入力する。(まぁホスト名はサーバー毎に固定だと思うが)

パスワードを忘れてしまった場合はともかく、ホスト名とユーザー名はConoHaのコントロールパネルの、「サイト管理」→「データベース」→から、接続したいデータベースのネームタグ及び下の方のユーザー名のプルダウンをクリックすれば確認できる。

接続先ホストが”mysql0000.conoha.ne.jp”, ユーザー名が”hoge”なら、

cXXXXXXX@webXXXX:~$ mysql -h mysql0000.conoha.ne.jp -u hoge -p

だ。

なお、コマンドラインからMySQLに接続する場合、

cXXXXXXX@webXXXX:~$ mysql -h [ホスト名] -u [ユーザー名] -p[パスワード]

でも接続できるが(-pとパスワードの間に空白は入れない)、その場合は

mysql: [Warning] Using a password on the command line interface can be insecure.

のようなwarningが出る。簡単に言えば、コマンドライン上で目に見える形でパスワード打つのはよくないよね、という話だ。

warningなので無視しても良いが、気になるのであれば、パスワードを外部ファイルから読み出すようにすれば良いらしい。上記エラーで検索して出てきた記事を参考にすれば解消できる。

phpmyadminからMySQLを操作する

何故か先にコマンドラインから操作する話をしたが、一番簡単だと思う方法はConoHaが用意してくれたphpmyadminを用いることだろう。

これを用いればGUIからデータベースを操作できるので、初心者はこちらを使うと良いだろう。

ConoHaのコントロールパネルの、「サイト管理」→「データベース」から、接続したいデータベースのユーザー名のプルダウンをクリックすれば、phpmyadminのリンクが置いてある。

リンクをクリックして、データベースのユーザー名とパスワードを入力すればphpmyadminのデータベース管理画面へ行くことができる。

ぼくはphpmyadminを最低限しか使っていないので、語れることはほぼ無い。(データベース初心者だが、基本CLI上で操作している。)詳しく知りたかったら別のサイトを検索してほしい。

PythonからMySQLを操作する

PythonからMySQLを操作する方法について説明する。

何故Python?と思う人がいるかもしれないが、ぼく自身が今後WebAPIを用いてデータベースを操作する予定があるから。WebAPIに関しては(講義で多少触れた)データベース以上の初心者なので、調べながら進めている途中だ。出来たらそちらも記事を書こうと思う。

では早速PythonからMySQLを……と、その前にshellの環境設定から。

ConoHa WINGの初期設定では、shellに日本語入力すると文字化けしてしまう。人によっては困らないかもしれないが、データベースのカラム名に日本語を使いたかったり、Pythonのプログラム上で日本語のコメントを残したいときに不便なので、文字コードの設定を変更する。

文字コードの設定は、ルート(自分がログインした時に居る場所)に置いてある.bash_profileで環境変数として記述してあげればよい。

コマンドラインで、

vim ~/.bash_profile

と入力し、

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

の2文を追加して保存、vimを閉じて

source ~/.bash_profile

として変更を適用すれば良い。viやvimの使い方を知らない場合はちゃんと調べることをオススメする。(ConoHaのVPSの方でviの使い方を説明した記事)Pythonを使ってデータベースを操作するなら、コマンドライン上で動くテキストファイルからは逃げられない。ちなみにぼくは苦手だ。vimが嫌いなら「nano」などを利用すると良いかもしれない。初期に入っていないので別途インストールする必要があるが。

話を戻そう。コマンドラインで日本語が入力できるようになったので、次にPythonの環境を構築する。

といっても、ConoHa WINGは初期からPython3及びpipが入っているのでやることは簡単だ。

まずはデータベースを操作するためのライブラリ「PyMySQL」をインストールする。

(Pythonでデータベースを操作するライブラリは他にも「mysql-connector-python」、「mysqlclient」、「MySQLdb」、「MySQL-Python」などが存在するらしい。比較している記事もいくつかあったので、気になるなら調べてみるといいと思う。ぼくは現在でも活発に開発が行われているという理由でPyMySQLを選んだ。)

コマンドライン上で、

pip install PyMySQL

とすれば良い。「Successfully installed PyMySQL」と表示されれば、インストールが正常に完了だ。

あとはテキストエディタを使ってpythonコードを書けばよい。例としてはこんな感じ。

(※この例は既にidとAgeとNameのカラムからなるテーブルが存在する例です!!テーブルの作成方法は別途調べるか、phpmyadminとかを使ってね!)

import pymysql.cursors

# execute
def execute(sql, params=None):
    # DB connection
    connection = pymysql.connect(
        host='mysqlXXXX.conoha.ne.jp',
        db='*****_*****',
        user='********',
        password='********',
        cursorclass=pymysql.cursors.DictCursor)

    try:
        with connection.cursor() as cursor:
            cursor.execute(sql, params)
            connection.commit()
    except:
        connection.rollback()
    finally:
        connection.close()

    return
from db_execute import execute
import sys

args = sys.argv

query = "INSERT INTO user (age, name) VALUES (%s, %s)"
print (args[1], args[2])
params = (args[1], args[2])
execute(query, params)

import pymysql.cursors

connection = pymysql.connect(
        host='mysqlXXXX.conoha.ne.jp',
        db='*****_*****',
        user='********',
        password='********',
        cursorclass=pymysql.cursors.DictCursor)

try:
    with connection.cursor() as cursor:
        result = cursor.execute("SELECT * FROM user")
        for row_data in cursor:
            print(row_data)
finally:
    connection.close()

こんな感じ。このコードは

cXXXXXXX@webXXXX:~/xxx/xxxxxxx/xxxx$ python db_insert.py 50 佐藤
cXXXXXXX@webXXXX:~/xxx/xxxxxxx/xxxx$ python db_select.py

みたいに使える。ここら辺は自分で使いやすい形に適宜置き換えて欲しい。

終わりに

3通りでのデータベースの操作について触れた。最もわかりやすいのはphpmyadminだと思う。

上の方でも述べたが、ぼくはここからこのサーバー上にWebAPIを用意して、データベースを操作できるようにする予定なので、Pythonで使えるようにした。

誰かの参考になれば幸いだ。

今日はここまで。

ではでは~

コメント

タイトルとURLをコピーしました