今回は「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にデータフレームをテーブル保存する
コメント
[…] 関連記事:PythonでCloudSQL上のMySQLのデータベースに接続する […]
[…] 関連記事:PythonでCloudSQL上のMySQLのデータベースに接続する […]