LoginSignup
0
0

More than 1 year has passed since last update.

XAMPPのMySQLにPythonから触る(mysqlclient & MySQLdb)

Last updated at Posted at 2023-02-11

1.はじめに

 ChromebookでXAMPP入れて、phpで表示して、やったーってなったけど、本題はPythonで制御すること。
 動かすまでの課題を解決したのでそのまとめです。私はChromebookだけれど、ほかのOSにも役立つ(はず)。
 都度参考文献を並べておきます。

2.解決した課題

 ・mysqlclientのインストール時にエラーを吐く
 ・MySQLdb(mysqlclientのライブラリ)でXAMPP上のデータベースにアクセスできない

3.解決方法(手順)

 XAMPPのインストール

ChromebookにPHP開発環境を構築(Xampp)
https://qiita.com/kamekame85/items/2c00aa9766a0c406d3cc

 phpmyadminでデータベースを作って遊んだ

phpMyAdminを使ってデータベースやテーブルを作成する
https://www.javadrive.jp/xampp/mysql/index5.html

PHP DBからデータ取得し テーブルに表示させる
http://dwcc.blog.fc2.com/blog-entry-31.html

 楽しかった。(小並感)

 Pythonを使えないか考え始める

 本題のプログラムがPythonなので、mysqlclientにたどりつく。

 mysqlclientのインストール時にエラーが出る解決策

 インストールしようとしたらこんなエラーが出た。

error
usr01@penguin:~$ pip install mysqlclient
Defaulting to user installation because normal site-packages is not writeable
Collecting mysqlclient
 Using cached mysqlclient-2.1.1.tar.gz (88 kB)
 Preparing metadata (setup.py) ... error
 error: subprocess-exited-with-error
 × python setup.py egg_info did not run successfully.
 │ exit code: 1
 ╰─> [16 lines of output]
   /bin/sh: 1: mysql_config: not found
   /bin/sh: 1: mariadb_config: not found
   /bin/sh: 1: mysql_config: not found
   Traceback (most recent call last):
    File "<string>", line 2, in <module>
    File "<pip-setuptools-caller>", line 34, in <module>
    File "/tmp/pip-install-baag5tyx/mysqlclient_699a0a539eaa485bb590d0340efdb3c5/setup.py", line 15, in <module>
     metadata, options = get_config()
    File "/tmp/pip-install-baag5tyx/mysqlclient_699a0a539eaa485bb590d0340efdb3c5/setup_posix.py", line 70, in get_config
     libs = mysql_config("libs")
    File "/tmp/pip-install-baag5tyx/mysqlclient_699a0a539eaa485bb590d0340efdb3c5/setup_posix.py", line 31, in mysql_config
     raise OSError("{} not found".format(_mysql_config_path))
   OSError: mysql_config not found
   mysql_config --version
   mariadb_config --version
   mysql_config --libs
   [end of output]
 note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

 インストールできないけど、たぶんpipの問題じゃないよ。とおっしゃっております。
 mysql_configがないよ。ともおっしゃっております。

PythonからMySQLを操作する方法(mysqlclientパッケージ)
https://pineplanter.moo.jp/non-it-salaryman/2022/07/17/python-mysqlclient/

 を参考にさせていただき、mysqlclientの前にインストールするライブラリが必要だったようで、それを1つ入れたら無事入りました。
 私に足りなかったのは、sudo apt-get install default-libmysqlclient-devでした。

 テストプログラムを作るも、XAMPPのSQLにつながらない

error
connection = MySQLdb.connect(
    host='localhost',
    user='ユーザー',
    passwd='パスワード',
    db='データベースの名前'
)

 こんな感じでプログラムを組んだが、この部分でエラーが出る。

つみきウェブ - 「Can't connect to local MySQL server through socket」エラーについて
http://www.hi-ho.ne.jp/tsumiki/book_sup2.html

 上記のサイト等を参考に調べたところ、どうやらデータベースはsocketというものに保存されているらしい。(初心者)
 このライブラリのデフォルト設定だと、エラー文から察するに/run/mysqld/mysqld.sockにあるのを探しに行ってしまう様子。

 じゃあXAMPPのソケットはどこにあるのか。

 答えは、/opt/lampp/var/mysql/mysql.sockです。

 解決策としては、上記のサイトにあるように、サーバー側の設定を変えるか、クライアント側の設定を変えるかのどちらかです。
 今回はクライアント側の設定を変えます。

PythonでMySQLに接続する方法【初心者向け】現役エンジニアが解説
https://magazine.techacademy.jp/magazine/18691

 このサイトでは、tmpフォルダの権限の関係で、と書かれていましたが、unix_socketという記述を発見しました。
 この記述により、socketの位置を詳細に設定できます。

not error
connection = MySQLdb.connect(
    host='localhost',
    unix_socket='/opt/lampp/var/mysql/mysql.sock',
    user='ユーザー',
    passwd='パスワード',
    db='データベースの名前'
)

 こんな感じ。
 Pythonのプログラムで実行が確認できました。

4.おわりに

 PythonからSELECT文実行できるのが新鮮すぎて気持ちがいいです。
 参考文献はどれも読みごたえのある良いHPだったので、今回の課題以外にも参考にしてみてください。

 
 あ、XAMPPの起動コマンドが長くて面倒な人はこちらもどうぞ。(宣伝)

Chromebook 自作コマンドの作成(XAMPP)
https://qiita.com/RS2324/items/e25909d2e937aa25e1c4

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0