0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python3からMySQLサーバにログインを試みた。

Last updated at Posted at 2021-06-03

なんかわからなくなったら探すのめんどくさいからノートにしてます
すぐ忘れるんで。
でもユーザー名とかPWとか隠すのめんどくさい。。

そもそもPython3が入ってなかったので
(このサイト)をステップ3まですべて行ってみた。

###問題のPythonからMySQLを接続する方法。
DBはschoolというものをもう作っていたのでそこに接続するようにする。

上記のURLを参照

ライブラリのインストールを行っていく。
Debian / Ubuntuの場合

sudo apt-get install python-dev default-libmysqlclient-dev

Python3の場合は更に追加で以下のライブラリをインストールします。

sudo apt-get install python3-dev

pipから以下のコマンドを入力すればインストールが完了です。

pip install mysqlclient

なんかpipあたりでうまくダウンロードできなかったりしたけどその辺しらべたらゴロゴロ出てくる。

touch ファイル名

で適当なファイルを作る。

vim ファイル名

で中身にPythonスプリクトを記入していく。

#!/usr/bin/env python3

import MySQLdb

connection = MySQLdb.connect(
        host='UbuntuのIP',
        user='MySQLで作ったユーザー名',
        passwd='UbuntuのPW',
        db='school')

結果これホストもユーザーもパスワードも書き方全部間違い。

Traceback (most recent call last):
  File "./school", line 5, in <module>
    connection = MySQLdb.connect(
  File "/home/MySQLで作ったユーザー名/.local/lib/python3.8/site-packages/MySQLdb/__init__.py", line 130, in Connect
    return Connection(*args, **kwargs)
  File "/home/MySQLで作ったユーザー名/.local/lib/python3.8/site-packages/MySQLdb/connections.py", line 185, in __init__
    super().__init__(*args, **kwargs2)
MySQLdb._exceptions.OperationalError: (2003, "Can't connect to MySQL server on 'UbuntuのIP:3306' (111)")

UbuntuのIPのMySQLサーバにアクセスできませんよーってエラーが出てきた。

一番下の
Can't connect to MySQL server
で検索をかけてみる。

こんなんでてきた。
言ってることは違うんだけど最後の方をみると、127.0.0.1やlocalhost以外は外部接続になってしまいそれでエラーになるらしい???なのか???(わかってない)

なのでhostの部分をlocalhostに変えてみる。
ついでにMySQLだというのを思い出し、UbuntuのパスワードからMySQLのパスワードに書き換えた。

#!/usr/bin/env python3

import MySQLdb

connection = MySQLdb.connect(
        host='localhost',
        user='MySQLで作ったユーザー名',
        passwd='MySQLのPW',
        db='school')
Traceback (most recent call last):
  File "./school", line 5, in <module>
    connection = MySQLdb.connect(
  File "/home/MySQLで作ったユーザー名/.local/lib/python3.8/site-packages/MySQLdb/__init__.py", line 130, in Connect
    return Connection(*args, **kwargs)
  File "/home/MySQLで作ったユーザー名/.local/lib/python3.8/site-packages/MySQLdb/connections.py", line 185, in __init__
    super().__init__(*args, **kwargs2)
MySQLdb._exceptions.OperationalError: (1044, "Access denied for user 'MySQLで作ったユーザー名'@'localhost' to database 'school'")

あっれまたエラー???
でも今度は違うエラーで

1044, "Access denied for user 'MySQLで作ったユーザー名'@'localhost' to database 'school'"

user 'MySQLで作ったユーザー名'のデータベースschoolは拒否された・・と・・?

Access denied for userで検索してみる。

これを見たんだけどよくわからない。
ログインで指定した情報と合致するアカウントが複数ある場合、ユーザー名よりホスト名の具体性が高いアカウントが優先して選択されるようです
とあるのでMySQLで作ったユーザー名は優先度低いってコト????(ちいかわ風)(よくわかってない)
って思ってなんとなくrootで実行したら成功した。

#!/usr/bin/env python3

import MySQLdb

connection = MySQLdb.connect(
        host='localhost',
        user='root',
        passwd='MySQLのPW',
        db='school')

最終的にはこんな感じ。

./school
で実行したらエラーも何も吐かなかったから実行だけされたのだと思う(ここのMySQLに繋いでとしか書いてなかったからね!)

0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?