【Python】bitflyer の Ticker を MySQL に突っ込む

2018年4月6日Python,開発

おはようございます。

昨日に引き続き、今回はTicker のデータをMySQLに登録してみます。

基本的に SQLite でやったことなんでサクッと。

プログラムは以前の記事を流用します。

【Python】BitflyerのTickerをSQLiteに突っ込む

スポンサーリンク

新規クラス作成

SQLiteUtil.py をコピーしてクラス名を変更し、処理の内容を MySQL ように書き換える。

MySQLUtil.py

import mysql.connector
import logging
from contextlib import closing


class MySQLUtil:
    """
    MySQL 操作用クラス
    """

    def __init__(self, host="localhost", port="3306", user="USER01", password="USER01", database="DB01"):
        self.config = {
            "host": host,
            "port": port,
            "user": user,
            "password": password,
            "database": database
        }
        self.create_db()

    def create_db(self):
        """
        データベース、及び必要なテーブルを作成します.
        :return:
        """

        logging.info("create database")
        with closing(mysql.connector.connect(**self.config)) as conn:

            c = conn.cursor()

            # ティッカーテーブル
            sql = "CREATE TABLE IF NOT EXISTS TBL_TICKER ("
            sql += "  PRODUCT_CODE VARCHAR(20)"
            sql += ", TIME_STAMP DATETIME"
            sql += ", TICK_ID VARCHAR(10)"
            sql += ", BEST_BID VARCHAR(20)"
            sql += ", BEST_ASK VARCHAR(20)"
            sql += ", BEST_BID_SIZE VARCHAR(20)"
            sql += ", BEST_ASK_SIZE VARCHAR(20)"
            sql += ", TOTAL_BID_DEPTH VARCHAR(20)"
            sql += ", TOTAL_ASK_DEPTH VARCHAR(20)"
            sql += ", LTP VARCHAR(20)"
            sql += ", VOLUME VARCHAR(20)"
            sql += ", VOLUME_BY_PRODUCT VARCHAR(20)"
            sql += ", PRIMARY KEY (TICK_ID)"
            sql += ")"
            c.execute(sql)

            c.close()
            conn.commit()

    def delete_data(self):
        """
        データを削除します
        :return:
        """

        logging.info("delete_data")
        with closing(mysql.connector.connect(**self.config)) as conn:

            c = conn.cursor()

            # データクリア
            sql = "DELETE FROM TBL_TICKER"
            c.execute(sql)
            c.close()
            conn.commit()

    def insert_data(self, ticker):
        """
        データを登録します
        :param ticker:
        :return:
        """

        with closing(mysql.connector.connect(**self.config)) as conn:

            c = conn.cursor()
            # データ登録
            sql = "INSERT INTO TBL_TICKER VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
            c.execute(sql, ticker)

            c.close()
            conn.commit()

プログラムの修正

Ticker 保存処理の修正

BfApi.py

def save_ticker(self, message):
    """
    ティッカー情報をデータベースに保存
    :param message:
    :return:
    """
    mysql = MySQLUtil()
    mysql.insert_data(self.convert_ticker_tuple(message.message))

起動してデータを確認

データ確認

無事にデータ登録されましたね。

まとめ

これでデータ登録中でも検索処理なんかは普通にできるんじゃないかと思います。

次回は pandas を使って保存したデータに対して何かやってみる予定です。

ではでは。

スポンサーリンク


関連するコンテンツ

2018年4月6日Python,開発MySQL,Python,プログラミング

Posted by doradora