PythonでMySQLに接続(CUI)

 PythonでMySQLに接続してデータを取得し、文字ベース(CUI)でデータを表示する。
 使用したMySQLサーバーとリモートPCの諸元は次の通りである。 

MySQLサーバーリモートPC
PC:HP630 (Celeron T3500, 2.1GHz/2コア)
OS:Ubuntu MATE 18.04.6 64ビット
メモリー:6GB
システム媒体:SSD 64GB
IPアドレス:192 . 168 . (abc) . (xyz)
MySQL Community Server 5.7.41

PC:Mate ML-D (Intel Core i5 2400S 2.5GHz)
OS:Windows10 64ビット
メモリー:12GB
システム媒体:HDD 250GB
Python 3.9.13 64-bit
Anaconda3 2022.10 (Python 3.9.13 64-bit)
PyCharm Community Edition 2022.3.2

 Ubuntu MATEへのMySQLのインストールについては、「Ubuntu MATEでMySQLを使う」を参照のこと。 

MySQLサーバー側の設定

1.Ubuntu MATEがリモート接続を許可する設定
 Ubuntu MATEがリモート接続を許可するように’/etc/mysql/mysql.conf.d/mysqld.cnf’を編集して、bind addressの設定を’127.0.0.1′ → ‘0.0.0.0’に変更する。

~$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

------------ (/etc/mysql/mysql.conf.d/mysqld.cnf) ------------
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address          = 127.0.0.1      ← コメントアウト
bind-address            = 0.0.0.0      ←  追加
---------------------------------------------------------------

2.リモート接続用MySQLユーザーの作成
 MySQLモニターでリモート接続用MySQLユーザーを作成して、select権限のみのリモート接続を許可する。

~$ mysql -u root -p
  ・
mysql> create  user  ユーザー名@'%'  identified  by  'パスワード' ;  ← リモート接続のユーザーを作成
mysql> slect  user, host  from  mysql.user ;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| ユーザー名        | %         |  ← すべてのPCからのリモート接続を許可
| debian-sys-maint | localhost |
| *******          | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
  ・
mysql> grant  select  on  gengo.*  to  ユーザー名@'%' ;  ← リモート接続のユーザーにselect権のみを付与
mysql> show grants for ユーザー名@'%';
+---------------------------------------------+
| Grants for ユーザー名@%                       |
+---------------------------------------------+
| GRANT USAGE ON *.* TO 'ユーザー名'@'%'        |
| GRANT SELECT ON `gengo`.* TO 'ユーザー名'@'%' |
+---------------------------------------------+
  ・
mysql> exit
  ・
~$ systemctl  restart  mysql  ← 設定を反映させるためにMySQLを再起動

リモートPC側の設定(mysql-connector-pythonのインストール)

 PythonからMySQLに接続するためには、接続モジュールのインストールが必要となる。このサイトでは、MySQL開発元のOracle社が公式ライブラリとして公開している’mysql-connector-python’を使う。
 はじめに「通常のPython~IDLE環境での設定」、次に「Anaconda~PyCharm環境での設定通常のPython環境での設定」について述べる。

1.通常のPython~IDLE環境での設定
 IDE(統合開発環境)にPython標準のIDEであるIDLEを使用することを前提とした設定を行う。

  • venvで仮想環境を作成する
     通常のPythonでは、仮想環境の作成にvenv命令を使う。ここでは、’C:\Users\(ユーザー名)\python\py39_mysql’フォルダに仮想環境を作成する。
     Windows PowerShellを起動して、フォルダ’C:\Users\(ユーザー名)\python’を作成し、配下に仮想環境’py39_mysql’を作成する。
PS C:\Users\***> mkdir python
  ・
PS C:\Users\***> cd python
PS C:\Users***\python> python -m venv py39_mysql
PS C:\Users\***\python> dir py39_mysql

    ディレクトリ: C:\Users\***\python\py39_mysql

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2023/03/25     21:43                Include
d-----        2023/03/25     21:43                Lib
d-----        2023/03/25     21:43                Scripts
-a----        2023/03/25     21:43            118 pyvenv.cfg

PS C:\Users\***\python>
  • mysql-connector-pythonモジュールのインストール
     仮想環境を有効化して、mysql-connector-pythonモジュールをインストールする。
     PowerShellでは、初期状態の実行ポリシーでスクリプトの実行が禁止されているので、一時的に実行ポリシーを変更してから仮想環境の有効化を行う。仮想環境が有効化されると、プロンプトの先頭部に'(py39_mysql’が表示される。
      ※ 実行ポリシーの変更や仮想環境の有効化は、PowerShellを起動するごとに行う必要が
       あるが、PowerShellでは入力補完機能が利用できるので、↑キーを押下することで過去に
       実行した命令を呼び出すことができる。

     pip命令でmysql-connector-pythonモジュールをインストールする。
PS C:\Users\***\python> cd py39_mysql
PS C:\Users\***\python\py39_mysql> Set-ExecutionPolicy RemoteSigned -Scope Process
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): y
PS C:\Users\***\python\py39_mysql> .\Scripts\Activate.ps1
(py39_mysql) PS C:\Users\***\python\py39_mysql> python -m pip install mysql-connector-python
  ・
Successfully installed(木) mysql-connector-python-8.0.32 protobuf-3.20.3
  ・
(py39_mysql) PS C:\Users\***\python\py39_mysql> python
Python 3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import mysql.connector  ← エラーが出なければ正しくインストールされている
>>> quit()
(py39_mysql) PS C:\Users\***\python\py39_mysql>
  • (参考)仮想環境が反映されたIDLEの起動方法
     仮想環境が反映されたIDLEの起動は次の方法で行う。
(py39_mysql) PS C:\Users\***\python\py39_mysql> python -m idlelib.idle
                                ※ 対話モードでIDLEを起動

(py39_mysql) PS C:\Users\***\python\py39_mysql> python -m idlelib.idle(ファイル名.py)
                                ※ ファイル編集モードでIDLEを起動

2.Anaconda~PyCharm環境での設定
 Pythonのプログラミングでは、モジュールの管理に’Anaconda’、IED(統合開発環境)に’PyCharm’を使うと仮想モジュール管理が簡潔になる。

  • Anacondaで仮想環境を作成する
     Anacondaでは、モジュールや仮想環境の操作にconda命令を使う。
    Anaconda Promptを起動して、仮想環境’py39_mysql’を作成しmysql-connector-pythonをインストールする。
(base) C:\Users\***>conda create -n py39_mysql python==3.9.13
  ・
Proceed ([y]/n)? y
  ・
(base) C:\Users\***>conda activate py39_mysql
(py39_mysql) C:\Users\***>conda install -c conda-forge mysql-connector-python
  ・
Proceed ([y]/n)? y
  ・
(py39_mysql) C:\Users\***>python
Python 3.9.13 (main, Oct 13 2022, 21:23:06) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import mysql.connector  ← エラーが出なければ正しくインストールされている
>>> quit()

(py39_mysql) C:\Users\***>
  • PyCharmでの設定
     PyCharmに上記で作成した仮想環境’py39_mysql’で動作する開発環境を設定する。
     はじめに、「新規プロジェクト」を選択し、新規プロジェクト画面でプロジェクトの名前をつけ、「▼ Python インタープリター」を展開して、「以前構成されていたインタープリター」で右端の「インタープリターの追加-ローカルインタープリターの追加」を選択する。

     Python インタープリターの追加画面では、「Conda 環境」を指定し、既存の環境を使用で’py39_mysql’を選択して「OK」をクリックする。

     新規プロジェクト画面に戻るので、インタープリターに’py39_mysql’が設定されていることを確認して「作成」をクリックで編集画面に進む。

     編集画面でPython コンソールを選択して、’import mysql.connector’と入力してエラーがなければ仮想環境’py39_mysql’で動作する開発環境が正しく設定されている。

MySQLへの接続

1.プログラミング
 MySQLに接続するプログラムは以下のとおりである。

import mysql.connector    # connectorモジュールのインポート

conn = mysql.connector.connect(    # 接続パラメータの指定
        host='192.168.*.***',
        user='myuser',
        password='********',
        database='gengo'
)

cursor = conn.cursor()    # 接続ハンドラの取得

# データを取得
cursor.execute("SELECT * FROM main")    # SQL文の実行
rows = cursor.fetchall()    # 検索結果の取得

# 出力
for i in rows:
    print(i)        # リストを表示

# コネクションを閉じる
cursor.close()
conn.close()

2.実行結果

  • IDLEでの実行結果
  • PyCharmでの実行結果
inserted by FC2 system