プログラミング初心者が最初につまづくのは、データベースの接続ではないでしょうか?
この記事ではpythonでデータベース(MySQL)を操作する方法について解説していきます。
この記事はこんな方におすすめです
・pythonでデータベース接続をする方
・AWSにデータベース(MySQL)を構築している方
前提条件
・AWS RDS(mySQL)を利用
・Proxy:EC2
・DB:mysql 8.0.7
・個人PC
- OS:Windows 10
- IDE:Pycharm Ver.2020.3
- python 3.7
接続構成
FireWallは、AWSの標準でついているFireWallです。自宅以外からアクセスできないようIP制限をしています。Proxy(EC2)は踏み台サーバとして使います。
DB接続クラスの作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<mysqldbconn.py> # ライブラリの読み込み import mysql.connector from sshtunnel import SSHTunnelForwarder import os.path # 変数設定 SSH_BASTION_ADDRESS = 'ec2-xxxx.amazonaws.com' # 踏み台のEC2(Proxyサーバ)のホスト名またはIPアドレスを入れる SSH_PORT = 22 # sshの接続ポート SSH_USER = 'xxxxx' # ec2の接続ユーザ名 SSH_PKEY_PATH = os.path.expanduser( 'C:/Users/xxxx/xxxx_keypair.pem') # Proxyにsshで繋ぐときのキーファイル(証明書)の保存先を指定する MYSQL_HOST = 'xxxx.rds.amazonaws.com' # ここにAmazon データベースのエンドポイントを書く MYSQL_PORT = 3306 # データベースの接続ポート番号 MYSQL_USER = 'user_name' # データベースに接続するユーザ名 MYSQL_PASS = 'password' # データベースに接続するユーザパスワード MYSQL_DB = 'db_name' # データベース名(なくてもよい) # DB接続クラス(MySqlDBConn)の作成 class MySqlDBConn: def __init__(self): pass # DBに接続してsqlをなげる関数 def db_fetch_all(sql_txt): # db_fetch_all というレコードを一気に取ってくる(フェッチオールする)関数を作った(名前は任意) with SSHTunnelForwarder( (SSH_BASTION_ADDRESS, SSH_PORT), ssh_pkey=SSH_PKEY_PATH, ssh_username=SSH_USER, remote_bind_address=(MYSQL_HOST, MYSQL_PORT), local_bind_address=('0.0.0.0', MYSQL_PORT), ): connection = mysql.connector.connect( host='127.0.0.1', port=MYSQL_PORT, user=MYSQL_USER, passwd=MYSQL_PASS, db=MYSQL_DB, charset='utf8mb4', ) pass cursor = connection.cursor() sql = sql_txt cursor.execute(sql) ret = cursor.fetchall() cursor.close() connection.close() return ret |
続いてDBに接続して SQLを投げる処理を別ファイルで作成します。
DB(MySQL)に接続する
1 2 3 4 5 6 7 8 9 |
<dbconn.py> # SQL(全件をとってくるSQL) sql = "select * from sample_tbl;" # sample_tblの全件レコードをとってくるsql dbconn = mysqldbconn.MySqlDbConn # mysqldbconn.pyの MySqlDbConnクラスを指定 rows = db_fetch_all(sql) # db_fetch_all関数に、上で作ったsql を投げる if rows == 0: print("正常終了") |
いかがでしたでしょうか?
今回は「PythonでMySQLに接続」をご紹介しました。
データベースを扱えるようになると、初心者を抜けた感じがしてきます。
これからもスキルをみにつけて、エンジニアの道を歩んでいきましょう!