I am Charmie

メモとログ

SQLAlchemy

SQLAlchemyについてまとめる. pandasのto_sqlread_sql及びSQLAlchemyの簡単そうな部分をウワーッと読んで使っていたので,改めて見直し.

この章構成に従って読んでいく.

  1. Establishing Connectivity - the Engine
  2. Working with Transactions and the DBAPI
  3. Working with Database Metadata
  4. Working with Data
  5. Data Manipulation with the ORM
  6. Working with Related Objects
  7. Further Reading

そもそもORMが何を指すのかすら分かっていないので,何とか今日中に最低限の知識を身につけたい.

こんな風に使いたい

Database classを以下のように設計してみる.

  • コンストラクタで既存のデータベースの有無をチェック
  • テーブルを追加するときに上書き,追加をどうするか決める (たぶん上書きでOK)
  • add_recordするときの方法
    1. 毎回データベースにデータを追加
    2. 毎回一時オブジェクトにデータを追加し,最後に1度だけデータベースにテーブルとして追加
  • データベースの設計をtypingかSQLAlchemyのデータ型で定義
from abc import ABCMeta, abstractmethod
import pandas as pd

from sqlalchemy import create_engine

class Database(metaclass=ABCMeta):
    def __init__(self, database_name: str):
        """ データベースの初期化 """

    @abstractmethod
    def set_table(self, table_name: str, table: pd.DataFrame) -> bool:
        """ データベースにテーブルを追加 """
        pass

    def get_table(self, table_name: str) -> pd.DataFrame:
        """ データベースからテーブルを取得 """
        pass

    @abstractmethod
    def add_record(self, table_name: str, record: Any) -> bool:
        """ テーブルにデータを追加 """
        pass

SQLAlchemyとは

  • Pythonでデータベースを扱うためのパッケージ
  • SQL Toolkit かつObject Relationan Mapper
  • 構成
    • ORM (Object Relational Mapper)
      • データベースに関してdomain中心の見方 (Coreに比べて,よりオブジェクト指向かつmutabilityの信頼性がある)
      • state oriented
      • データベースとオブジェクト指向言語間のデータをmapping
      • Pythonでデータベースを扱うための機能(関数やクラス)と解釈すればいいのかな?
      • Coreの上に構築されている
      • (Pythonの?)オブジェクトモデルをデータベーススキーママッピング
    • Core
      • データベースに関してschema中心の見方
      • command oriented