【Python】MySQLに接続してデータを取得、表示してみる
おはようございます。
前回までに Ticker の情報を SQLite に登録してきたのですが、
やっぱり SQLite だとTicker みたいに激しくデータ登録をしてしまうと
データ検索でもロックが発生してしまってうまくないので MySQL を使おうかと思います。
プログラムは SQLite のサンプルプログラムを流用してとりあえずデータ表示をしてみます。
スポンサーリンク
新規プロジェクトの作成
PyCharmを起動し、上部メニューの「File」>「New Project」を選択し、
ウィザードに沿ってプロジェクトを新規作成します。
(今回は「MySqlSample」プロジェクトとしました。)
プログラムの移植
SQLiteのサンプルプログラムを流用します。
一通り(フォルダ構成)含む、ファイルを移植します。
フォルダ構成:
MySqlSample
│ server.py
├─static
│ ├─css
│ │ style.css
│ └─js
│ script.js
└─templates
index.html
MySQL用パッケージのインストール
上部メニューの「File」>「Default Settings」を選択します。
Default Setting画面が表示されるので、右上の対象プロジェクト環境を今回作成した環境に変更し、右側にある「+」ボタンをクリックします。
パッケージ検索画面で、「mysql」と検索します。
一覧に表示された「mysql-connector-python-rf」を選択して「Install Package」ボタンをクリックします。
同様に、「Tornado」パッケージもインストールしてください。
プログラムの修正
インポート宣言の追加
server.py
import mysql.connector
接続処理等の修正
DBへの接続方法、SQL文法、カラムの型など、
SQLiteとMySQLで違う箇所を修正します。
server.py(SQLiteUtil → MySQLUtilに変更)
class MySQLUtil: """ MySQL操作用クラス """ @staticmethod def create_db(): """ データベース、及び必要なテーブルを作成します. """ logging.info("create database") with closing(mysql.connector.connect( host="localhost", port="3306", user="USER01", password="USER01", database="DB01" )) as conn: c = conn.cursor() # 種別テーブル sql = "CREATE TABLE IF NOT EXISTS MSTKIND (" sql += " KIND_CD CHAR(2) NOT NULL" sql += " , KIND_NAME VARCHAR(20)" sql += " , PRIMARY KEY (KIND_CD)" sql += ")" c.execute(sql) # 猫テーブル sql = "CREATE TABLE IF NOT EXISTS TBLCAT (" sql += " NO INTEGER(2) NOT NULL" sql += " , NAME VARCHAR(20) NOT NULL" sql += " , SEX CHAR(3) NOT NULL" sql += " , AGE INTEGER(1) DEFAULT 0 NOT NULL" sql += " , KIND_CD CHAR(2) DEFAULT '00' NOT NULL" sql += " , FAVORITE VARCHAR(40)" sql += " , PRIMARY KEY (NO)" sql += ")" c.execute(sql) c.close() @staticmethod def insert_initial_data(): """ 各テーブルに初期データを登録します """ logging.info("insert initial data") with closing(mysql.connector.connect( host="localhost", port="3306", user="USER01", password="USER01", database="DB01" )) as conn: c = conn.cursor() # 種別マスタ sql = "REPLACE INTO MSTKIND (KIND_CD, KIND_NAME) VALUES (%s,%s)" kinds = [ ('01', 'キジトラ'), ('02', '長毛種(不明)'), ('03', 'ミケ(っぽい)'), ('04', 'サビ'), ('09', 'その他'), ] c.executemany(sql, kinds) # 猫データ sql = "REPLACE INTO TBLCAT VALUES (%s,%s,%s,%s,%s,%s)" cats = [ (1, "そら", "♂", 6, "01", "犬の人形"), (2, "りく", "♂", 5, "02", "人間"), (3, "うみ", "♀", 4, "03", "高級ウェットフード"), (4, "こうめ", "♀", 2, "04", "横取りフード"), ] c.executemany(sql, cats) c.close() conn.commit() @staticmethod def select_kind_all(): """ MST種別のデータを全て取得します. :return: """ logging.info("select all kind") with closing(mysql.connector.connect( host="localhost", port="3306", user="USER01", password="USER01", database="DB01" )) as conn: c = conn.cursor() sql = "SELECT * FROM MSTKIND ORDER BY KIND_CD" c.execute(sql) return c.fetchall() @staticmethod def select_cat(name, kind_cd): """ 猫を検索します. :param name: :param kind_cd: :return: """ logging.info("select cat") with closing(mysql.connector.connect( host="localhost", port="3306", user="USER01", password="USER01", database="DB01" )) as conn: c = conn.cursor(dictionary=True) # SQL組み立て sql = "SELECT C.NO, C.NAME, C.SEX, C.AGE, C.KIND_CD, K.KIND_NAME, C.FAVORITE FROM TBLCAT C" sql += " LEFT OUTER JOIN MSTKIND K ON ( C.KIND_CD = K.KIND_CD)" if kind_cd == "": sql += " WHERE C.NAME LIKE '" + name + "%'" else: sql += " WHERE C.NAME LIKE '" + name + "%' AND C.KIND_CD = '" + kind_cd + "'" sql += " ORDER BY C.NO" result = [] row = {} c.execute(sql) for r in c.fetchall(): result.append({ "no": r['NO'], "name": r['NAME'], "sex": r['SEX'], "age": r['AGE'], "kind_name": r['KIND_NAME'], "favorite": r['FAVORITE'], }) return result
起動してみる
無事に検索、データ表示することができました。
まとめ
ひとまず、データの表示までは簡単に移植できました。
次回は実際に Bitflyer の Ticker 情報を登録してみましょうかね。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません