レンタルサーバー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で使えるようにした。
誰かの参考になれば幸いだ。
今日はここまで。
ではでは~
コメント