AB型技術系 主に備忘録

ほぼプログラム関連の備忘録

スターサーバーでpythonからMySQLに接続できた!

前回はpythonで使えるMySQLライブラリを調べてみました。

freelancer.hatenablog.jp

結論から言うとmysql-connector-pythonとPyMySQLを使ってMySQLに接続してデータを取得することができました。

ライブラリのダウンロードと設置

mysql-connector-python

下記からmysql-connector-python-8.0.26.tar.gz をダウンロードする。

pypi.org

解凍してmysqlディレクトリをサーバーにアップロードする。

f:id:freelancer13:20211003211620p:plain
mysql-connector-python

PyMySQL

下記からPyMySQL-1.0.2.tar.gz をダウンロードする。

pypi.org

解凍してpymysqlディレクトリをサーバーにアップロードする。

f:id:freelancer13:20211003211818p:plain
PyMySQL

アップロード後

f:id:freelancer13:20211003213757p:plain
アップロード後のディレクトリ構成

動作確認用のテーブル

f:id:freelancer13:20211003214914p:plain
動作確認用のテーブル

サンプルプログラム(mysql-connector-python)

mysqlconnector.py

#!/usr/bin/python3.6
import mysql.connector as mydb
import sys, io

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding = 'utf-8')

connection = mydb.connect(host='aaa.bbb.ccc',
                          port='3306',
                          user='dbuser',
                          password='dbpassword',
                          database='db_sample',
                          charset='utf8'
)
cursor = connection.cursor()
cursor.execute("select count(*) as cnt from sample1")

cnt = 0
row = cursor.fetchone()
if row is not None:
     cnt = row[0]

cursor.close()
connection.close

print("Content-Type: text/html; charset=utf-8\n")
print("<html><meta charset='utf-8'><body>")
print("<h1>mysql-connector-pythonサンプル</h1>")
print("件数" + str(cnt))
print("</body></html>")

サンプルプログラム(PyMySQL)

pymysql.py

#!/usr/bin/python3.6
import pymysql
import pymysql.cursors

import sys, io

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding = 'utf-8')

# コネクションの作成
connection = pymysql.connect(host='aaa.bbb.ccc',
                             user='dbuser',
                             port=3306,
                             password='dbpassword',
                             db='db_sample',
                             charset='utf8',
                             cursorclass=pymysql.cursors.DictCursor)
     
cursor = connection.cursor()
cursor.execute("select count(*) as cnt from sample1")

cnt = 0
row = cursor.fetchone()
if row is not None:
     cnt = row["cnt"]

print("Content-Type: text/html; charset=utf-8\n")
print("<html><meta charset='utf-8'><body>")
print("<h1>PyMySQLサンプル</h1>")
print("件数" + str(cnt))
print("</body></html>")

コネクション関連の設定はmysql-connector-pythonとほぼ同じ。
ポートの指定が数値型なのとcursorclassにpymysql.cursors.DictCursorを指定することにより結果を辞書型で返してくれます。

実行結果

f:id:freelancer13:20211003220723p:plain
mysqlconnector.pyの実行結果

f:id:freelancer13:20211003221644p:plain
pymysql.pyの実行結果

件数がちゃんと出力されました。
これでスターサーバーでpythonMySQLを使ってWebアプリを作る環境が整いました。