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のインストール時にエラーが出る解決策
インストールしようとしたらこんなエラーが出た。
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につながらない
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の位置を詳細に設定できます。
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