[ConoHaWING]データベースを作成してPythonから使う方法

ConoHa WINGにデータベースを追加して、Pythonから使うための手順メモ。

ConoHa WINGにはデフォルトでPython 3.6.8がインストールされていますが、pipコマンドでパッケージを追加しようとすると権限エラーが発生するため、pyenv + anacondaを使う方法を採用しました。

デフォルトのPythonでも以下のように「–user」を付けるとpipコマンドが使えるらしいのですが、使えない場合もあるらしい。。。

$ pip install --user package_name

データベースを追加

データベースを作成する|ConoHa WINGサポート
ConoHa WINGのご利用ガイド、よくある質問などの各種サポート情報をご案内しています。ConoHa WINGは便利なご利用ガイドと専任スタッフのサポートで安心してご利用いただけます。
データベースユーザーを作成する|ConoHa WINGサポート
ConoHa WINGのご利用ガイド、よくある質問などの各種サポート情報をご案内しています。ConoHa WINGは便利なご利用ガイドと専任スタッフのサポートで安心してご利用いただけます。

テーブルを追加

phpMyAdminにログインする|ConoHa WINGサポート
ConoHa WINGのご利用ガイド、よくある質問などの各種サポート情報をご案内しています。ConoHa WINGは便利なご利用ガイドと専任スタッフのサポートで安心してご利用いただけます。

TESTテーブルを作成する。

データを追加しておく。

pyenvをインストール

  1. ConoHa WINGへSSHでログインする。
  1. pyenvをインストールする。(「/home/[ユーザ名]」で操作)
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
  1. .bash_profileにPATHを追記する。
# pyenv
PATH=$HOME/.pyenv/bin:$PATH
eval "$(pyenv init -)"
  1. .bash_profileの設定を反映する。
$ source .bash_profile
  1. バージョンを確認。
$ pyenv --version
pyenv 2.3.15-1-g4ef81b5

$ pyenv version
system (set by /home/[ユーザ名]/.pyenv/version)

$ python --version
Python 3.6.8
  1. Pythonをインストール・・・できなかった。

3.10系以上ではConoHa WINGに入っているOpenSSLのバージョンが古いため、そのままでは利用できずソースからビルド&インストールを行う必要がある。また、pyenvからインストールしようとするとmake: vfork: Cannot allocate memoryというメモリ不足エラーが発生する。

anacondaをインストール

  1. anacondaをインストールする。(ここでは「anaconda3-2022.10」をインストール)
# ~/tmpフォルダを作成
$ mkdir tmp

# anaconda3をインストール
$ TMPDIR="$HOME/tmp" pyenv install anaconda3-2022.10
  1. .bash_profileにPATHを追記する。
PATH=$HOME/.pyenv/versions/anaconda3-2022.10/bin:$PATH
  1. .bash_profileの設定を反映する。
$ source .bash_profile
  1. 確認
$ conda info
〜略〜
conda version : 22.9.0
〜略〜

$ python --version
Python 3.9.13

Pythonからデータベースへ接続

  1. pymysqlをインストールする。
$ pip install pymysql
Collecting pymysql
  Using cached PyMySQL-1.0.2-py3-none-any.whl (43 kB)
Installing collected packages: pymysql
Successfully installed pymysql-1.0.2
  1. データベースからデータを取得するコードを書く。
import pymysql.cursors

# MariaDBの接続情報
conn = pymysql.connect(
    host='[作成したデータベースの「接続先ホスト」]',
    db='[データベース名(ネームタグではないので注意)]',
    user='[ユーザ名]',
    password='[パスワード]',
    cursorclass=pymysql.cursors.DictCursor)

# SELECT
def select(sql, params=None):
    cur = conn.cursor()
    if params is not None:
        cur.execute(sql, params)
    else:
        cur.execute(sql)
    return cur

# データを取得して表示
result = select("SELECT * FROM TEST")
for rowData in result:
    print(rowData)
  1. 実行
$ python db_access.py
{'ID': 1, 'INS_DATE': datetime.datetime(2023, 3, 21, 10, 6, 56), 'UP_DATE': datetime.datetime(2023, 3, 21, 10, 6, 56), 'NAME': 'ああああ'}
{'ID': 2, 'INS_DATE': datetime.datetime(2023, 3, 21, 10, 8, 48), 'UP_DATE': datetime.datetime(2023, 3, 21, 10, 8, 48), 'NAME': 'いいいい'}
{'ID': 3, 'INS_DATE': datetime.datetime(2023, 3, 21, 10, 9, 35), 'UP_DATE': datetime.datetime(2023, 3, 21, 10, 9, 35), 'NAME': 'うううう'}

ConoHa WINGのサーバ上で実行した場合のみデータベースへ接続可能。外部からの接続は出来ないっぽい。

コメント

  1. David Smith より:

    Someone essentially help to make severely articles I would state.
    This is the first time I frequented your web page and up to now?
    I surprised with the analysis you made to make this particular submit extraordinary.
    Excellent process!

  2. I’ve been exploring for a bit for any high-quality articles or weblog posts
    in this kind of area . Exploring in Yahoo I eventually stumbled upon this site.

    Studying this information So i am happy to convey that I have an incredibly just right uncanny
    feeling I discovered exactly what I needed. I most surely will make sure
    to do not fail to remember this web site and provides it a
    look regularly.

  3. Very nice write-up. I definitely appreciate this site.
    Keep it up!

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