
この記事では、自宅PCなどエックスサーバー外部のPythonから、エックスサーバーにあるWordPressのデータベースへ接続する方法を解説します。
たとえば、Pythonでスクレイピングしたデータを、WordPressの独自テーブルに書き込んで表示させることも可能になります。
接続にはエックスサーバーのSSH機能を使いますが、設定はそれほど難しくありませんのでご安心ください。
接続の手順
エックスサーバーでSSH設定をする
まずは、エックスサーバーの「サーバーパネル」にログインし、SSHを有効にします。
次に「公開鍵認証用鍵ペアの生成」を行います。
詳しい設定手順は、エックスサーバーの公式マニュアルを参考にしてください。
※このとき設定する「パスフレーズ(任意の文字列)」は後で使うので、忘れないようにメモしておきましょう。
生成された秘密鍵ファイル(.key
)は、Windowsの任意のフォルダに保存しておきます。
WordPressのデータベースに独自テーブルを作成
続いて、WordPressで使用中のデータベースに独自テーブルを追加します。
エックスサーバーの「サーバーパネル」から phpMyAdmin を起動します。
データベース名・ユーザー名・パスワードなどは、WordPressの wp-config.php
に記載されています。
1 2 3 4 |
// wp-config.phpの一部 define( 'DB_NAME', 'データベース名' ); define( 'DB_USER', 'ユーザー名' ); define( 'DB_PASSWORD', 'パスワード' ); |
今回は例として「wp_test」テーブルを作成し、次のカラムを用意します。
-
ID(主キー、自動採番)
-
name(商品名)
-
color(色)
-
stock(在庫数)
Pythonに必要なモジュールをインストール
Pythonからデータベースに接続するには、次の2つのモジュールをインストールします。
1 |
pip install mariadb |
1 |
pip install sshtunnel |
Pythonコード
では先ほど作成したテーブルにレコードを挿入するコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
import mariadb import sshtunnel def xserverDB_Connection(): #環境に合わせて書き換え server_id = 'サーバーID' pass_phrases = '秘密鍵のパスフレーズ' key_directory = r'秘密鍵の保存ディレクトリ' db_username = 'データベースのユーザー名' db_password = 'データベースのパスワード' db_name = 'データベース名' #SSH接続 with sshtunnel.SSHTunnelForwarder((server_id + '.xsrv.jp', 10022),ssh_username=server_id,ssh_private_key_password=pass_phrases,ssh_pkey=key_directory,remote_bind_address=("localhost", 3306)) as server: #SQL接続 try: conn = mariadb.connect(user=db_username,password=db_password,host='127.0.0.1',port=server.local_bind_port,database=db_name) except mariadb.Error as e: print(f"DB接続エラー:{e}") return None cur = conn.cursor() try: #SQLを発行 cur.execute(sql,data) finally: cur.close() conn.commit() conn.close() ##main item_name = 'ペイントマーカー' item_color = 'ピンク' item_stock = 3 #クエリの作成 sql = 'INSERT INTO wp_test (name, color, stock) values (%s, %s, %d)' data = (item_name, item_color, item_stock) #xserverDB_Connection()関数を呼び出す xserverDB_Connection() |
-
汎用性を持たせるため、
xserverDB_Connection()
という関数にまとめています。 -
サーバーIDや秘密鍵のパスなどは、ご自身の環境に合わせて書き換えてください。
-
秘密鍵ファイルのパスは、ファイルを右クリックして「パスのコピー」から取得できます。
⚠ サーバーIDは「アカウントID」とは異なるので注意してください。
実行結果
以下のように、無事エックスサーバーのデータベースにレコードが挿入されました。