Python

PythonでCloudSQL上のMySQLのデータベースに接続する

この記事は約5分で読めます。

 

今回は「PythonでCloudSQLのデータベースにアクセスする」方法について紹介したいと思います。CloudSQLのインスタンスで作成しているデータベースは「MYSQL」にしている想定で進めています。

 

前準備

 

CloudSQLの設定

 

IPを登録する必要があります。

現在使用しているPCのIPアドレスはPython経由だと以下のようにして確認できます。

 

# 通常のアクセスの場合
import requests
res = requests.get('https://ipinfo.io').json()
print(res)

 

これで表示されたIPをcloudSQLのホーム画面から→「接続」→「ネットワーキング」の「承認済みネットワーク」に適当なラベルを付けて登録します。これで準備完了です。

 

MYSQLのインストール

 

WindowsPCの場合はMySQLWorkBenchというソフトをインストールしてください

 

参照URL:https://it-kyujin.jp/article/detail/1132/

 

LinuxなどVPSの場合は下記参照してコマンドライン上からMysqlをインストールしてください

 

参考:

 

ライブラリのインストール

 

まずはライブラリをインストールします。

MYSQLがインストールされていないとエラーになります

 

$ pip install mysqlclient

 

上記でエラーが発生した場合

 

CentOS7

 

CentOS7環境で MySQL8.0 でインストールした状態で上記のコマンドを実行したにもかかわらず以下のエラーが出ることがあります。

 

<エラーメッセージ>

OSError: mysql_config not found
mysql_config –version
mariadb_config –version
mysql_config –libs

 

その場合は以下のコマンドを実行してから再度試してみてください

 

$ sudo yum install python-devel mysql-devel
$ pip install mysqlclient

 

Ubuntuの場合

 

またUbuntuの場合は以下のコマンドを実行することで解決することがあるみたいです

 

apt -y install libmysqlclient-dev

 

PythonからCloudSQLにアクセス

 

今回はCloudSQLのインスタンスにデフォルトで作成されているデータベースであるsysのsys_configというテーブルの情報をSELECT文で取得するサンプルコードになります

 

import MySQLdb
conn = MySQLdb.connect(
    user='root',#ユーザー名
    passwd='pass',# パスワード
    host='xx.xxx.xxx.xx', #概要に記載されているインスタンスのIPアドレス
    db='sys' #アクセスするデータベース名
)
cur = conn.cursor()
sql = "SELECT * FROM sys.sys_config;"
cur.execute(sql)
rows = cur.fetchall()
for r in rows:
    print(r)

 

 

<実行結果>

(‘diagnostics.allow_i_s_tables’, ‘OFF’, datetime.datetime(2023, 1, 21, 8, 3, 3), None)
(‘diagnostics.include_raw’, ‘OFF’, datetime.datetime(2023, 1, 21, 8, 3, 3), None)
(‘ps_thread_trx_info.max_length’, ‘65535’, datetime.datetime(2023, 1, 21, 8, 3, 3), None)
(‘statement_performance_analyzer.limit’, ‘100’, datetime.datetime(2023, 1, 21, 8, 3, 3), None)
(‘statement_performance_analyzer.view’, None, datetime.datetime(2023, 1, 21, 8, 3, 3), None)
(‘statement_truncate_len’, ’64’, datetime.datetime(2023, 1, 21, 8, 3, 3), None)

参考:https://commte.net/7661

 

 

これでPythonからCloudSQLにアクセスすることができました。これを使ってINSERT INTOのクエリを叩いてデータを追加することも可能ですが、データフレームなどの大量のデータについてはSqlalchemy経由で接続したほうが捗るかなと思います。大量のデータの追加などについては以下の記事を参照してください。では~

 

関連記事:【Python】SqlAlchemyでCloudSQLにデータフレームをテーブル保存する

 

コメント

  1. […] 関連記事:PythonでCloudSQL上のMySQLのデータベースに接続する […]

タイトルとURLをコピーしました