質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1229閲覧

Pythonでデータベースに接続

neko3378

総合スコア8

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/02/17 07:21

編集2020/02/18 00:12

前提・実現したいこと

Pythonでシリアル通信で受信したデータをラズパイ内のDBに格納したい

発生している問題・エラーメッセージ

mysqlclientをインストールしているのにMySQLdbのモジュールがないというエラーが出ます。

pi@raspberrypi:~/web/cgi-bin $ python3 dat_ret.py Traceback (most recent call last): File "dat_ret.py", line 5, in <module> import MySQLdb ModuleNotFoundError: No module named 'MySQLdb'

該当のソースコード

Python

1#!/usr/bin/env python3 2 3import serial 4import re 5import MySQLdb 6 7connection = MySQLdb.connect( 8 host='localhost', 9 user='root', 10 passwd='pass', 11 db='sensordata') 12cursor = connection.cursor() 13 14//numをprintで表示させて正常に動くこと確認済 15con=serial.Serial('/dev/ttyAMA0', 115200, timeout=30) 16line = con.readline() 17num=re.findall('[0123456789.]+',line.decode('sjis')) 18 19//insertのところは正常に動作するかまだ確認できてません 20cursor.execute("""INSERT INTO name_age_list (temp, press, hum, light) 21 VALUES (num[0], num[1], num[2], num[3]) 22 """) 23connection.commit() 24connection.close()

試したこと

gunicorn+Django+MySQLで No module named 'MySQLdb' エラー
wsgi.pyが何個かあってどのwsgi.pyをいじればいいか分からず…
/usr/lib/python3/dist-packages/werkzeug/wsgi.pyに上記サイトの記述を追加しても変化なし

補足情報(FW/ツールのバージョンなど)

mysqlclientインストールの流れです。

pi@raspberrypi:~/web/cgi-bin $ sudo apt-get install python-dev default-libmysqlclient-dev pi@raspberrypi:~/web/cgi-bin $ sudo apt-get install python3-dev pi@raspberrypi:~/web/cgi-bin $ pip install mysqlclient Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting mysqlclient Downloading https://files.pythonhosted.org/packages/d0/97/7326248ac8d5049968bf4ec708a5d3d4806e412a42e74160d7f266a3e03a/mysqlclient-1.4.6.tar.gz (85kB) 100% |????????????????????????????????| 92kB 868kB/s Building wheels for collected packages: mysqlclient Running setup.py bdist_wheel for mysqlclient ... done Stored in directory: /home/pi/.cache/pip/wheels/37/3d/24/5327fa50817a65ed0ee4dc8809e5c39962b0dd5e078ebf4dc1 Successfully built mysqlclient Installing collected packages: mysqlclient Successfully installed mysqlclient-1.4.6

試しにもう一度mysqlclientをインストールしようとしたら既にインストール済と出ます。

pi@raspberrypi:~/web/cgi-bin $ pip install mysqlclient Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Requirement already satisfied: mysqlclient in /home/pi/.local/lib/python2.7/site-packages (1.4.6)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2020/02/17 08:53

> mysqlclientをインストールしているのに どのようにインストールしたのか全手順をご提示ください。ちなみに、当該Pythonスクリプトを動作させる機器にインストールしたのですよね? エラーメッセージは、きちんとモジュールがインストールされていないことを意味しています。
t_obara

2020/02/18 00:18

python2とpython3の両方を入れているのでしょうか?
neko3378

2020/02/18 00:36

pythonがpython2なのでしょうか? pi@raspberrypi:~/web/cgi-bin $ python --version Python 2.7.16 pi@raspberrypi:~/web/cgi-bin $ python3 --version Python 3.7.3 pythonに今までちゃんと触れたことがなく、ネットで調べては試し調べては試しという感じです。
guest

回答1

0

ベストアンサー

python

1Requirement already satisfied: mysqlclient in /home/pi/.local/lib/python2.7/site-packages (1.4.6)

pipのログから見るに、python3側にインストールされていないのではないでしょうか?

投稿2020/02/18 01:00

meshi_s

総合スコア276

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neko3378

2020/02/18 01:28

mysqlclientはpython3用になったものではないのでしょうか? python3側にインストールする方法を探してみてもなかなか出てこないので良ければそこを教えていただけますでしょうか。
meshi_s

2020/02/18 01:48

https://note.nkmk.me/python-pip-usage/#pippip2-pip3 上記サイトに記載されていますが、 > pipはPython2かPython3のどちらかに割り当てられている。 > 例えばpipがPython2に対応している場合、pipでインストールしたパッケージはPython3では使えないので注意。 かと思います。 pip3を使えばいけるのではないでしょうか?
neko3378

2020/02/18 02:00

ありがとうございます!できたようです! ただ、新しいエラーが出たのですが…これはログインできてなくてエラーなのでしょうか… pi@raspberrypi:~/web/cgi-bin $ python3 dat_ret.py Traceback (most recent call last): File "dat_ret.py", line 11, in <module> db='sensordata') File "/home/pi/.local/lib/python3.7/site-packages/MySQLdb/__init__.py", line 84, in Connect return Connection(*args, **kwargs) File "/home/pi/.local/lib/python3.7/site-packages/MySQLdb/connections.py", line 179, in __init__ super(Connection, self).__init__(*args, **kwargs2) MySQLdb._exceptions.OperationalError: (2005, "Unknown MySQL server host '127.0.0.1:3306' (-2)")
meshi_s

2020/02/18 02:10

良かったです。 > Unknown MySQL server host '127.0.0.1:3306' (-2) とあるので、ホスト名が間違っているとかではないでしょうか。 エラーメッセージの内容で検索すると何か分かるかと思います。
neko3378

2020/02/18 02:28

エラーメッセージで検索すると、DBがちゃんと動いているか、passなど間違ってないか、というのを確認してるのが多かったので確認してみました。 他のphpのプログラムでもDBに接続するようにしてるのですが、そちらでは $servername = "127.0.0.1:3306"; $dbname = "sensordata"; $username = "root"; $password = "pass"; $conn = new mysqli($servername, $username, $password, $dbname); の設定でしっかり接続できていました。 DBもちゃんと動いてる、他のプログラムでは同じ設定で接続できている、となるとどこで失敗してるのかが見当つきません。
neko3378

2020/02/18 02:44

MySQLdb.connect()の引数を調べてみたところ、hostとportが別々になってたのでためしに host = "127.0.0.1:3306"; ↓ host = '127.0.0.1' port = 3306 に変えてみました。 pi@raspberrypi:~/web/cgi-bin $ python3 dat_ret.py Traceback (most recent call last): File "dat_ret.py", line 21, in <module> """) File "/home/pi/.local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 209, in execute res = self._query(query) File "/home/pi/.local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 315, in _query db.query(q) File "/home/pi/.local/lib/python3.7/site-packages/MySQLdb/connections.py", line 239, in query _mysql.connection.query(self, query) MySQLdb._exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '[0], num[1], num[2], num[3])' at line 2") というエラーに変わったので接続はできた、とみても大丈夫ですかね?
meshi_s

2020/02/18 02:46

MySQLdbでは、portの設定項目もあるようなので、host名にポート番号は含めないのではないでしょうか? 127.0.0.1:3306 ↓ 127.0.0.1
meshi_s

2020/02/18 02:50 編集

あ、行き違いになってしまいました。 > というエラーに変わったので接続はできた、とみても大丈夫ですかね? はい、大丈夫と思います。 insert文が間違っているエラーメッセージですね。
neko3378

2020/02/18 02:56

知識が足らずぐだぐだでしたが解決までお付き合いいただき本当にありがとうございました! insertのエラーも解決してあと少し変なエラー出てますが、とりあえず接続はできたので残りはもう一度調べながらやってみようと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問