パンダ SQLAlchemy
 
この記事では、SQLAlchemy ORM の一般的な定義、pandas DataFrame との比較、および SQLAlchemy ORM オブジェクトを pandas DataFrame に変換する方法について説明します。 ただし、この記事のために pandas DataFrame とリレーショナル データベースがどのように設定されているかを既に理解していることを前提としています。
SQLAlchemy ORM
SQLAlchemy は、Python スクリプトとスクリプトに接続されたデータベースとの間の通信エクスペリエンスを強化するのに役立つモジュールです。 このモジュールは通常、ORM またはオブジェクト リレーショナル マッピング ツールとして使用されます。
ORM は基本的に、Python スクリプト内のクラスを変換します。 ORM を使用すると、単純な SQL クエリを記述して、データベース関連のアクションを実行できます。
ORM を介して、Python スクリプトでクラスを SQL テーブルに変換し、関数をクエリに変換できます。 したがって、SQLAlchemy は、Python スクリプトとリレーショナル データベースの間のブリッジと呼ばれることがよくあります。
SQLAlchemy ORM を DataFrame に変換する
これらの関数は、SQL クエリまたはテーブルをデータフレーム オブジェクトに読み込みます。 read_sql() 関数は、関数に提供されたパラメーターに従って、プロセスを read_sql_query() または read_sql_table() 関数に委譲します。
read_sql() 関数で通常使用されるパラメータの一部を次に示します。
| パラメーター | 説明 | 
|---|---|
| テーブル名(文字列) | 名前が示すように、これはデータベース テーブルの名前です。 | 
| con(文字列) | 通常、データ接続 URI が含まれます。 | 
| スキーマ(文字列) | このパラメーターには、照会されるはずのデータベース スキーマ名が含まれます。 データベースのスキーマがない場合は、このパラメーターを defaultに設定できます。その値はNoneに設定されています。 | 
| index_col(文字列/文字列のリスト) | これらはインデックスまたは列です。 これらはオプションであり、デフォルト値の Noneを使用できます。 | 
| coerce_float(ブール値) | このパラメータは、非文字列値を浮動小数点値に変換します。 このパラメータのデフォルトは、 Trueに設定されています。 | 
| parse_dates(リスト/辞書) | これらは、日付として解析できる列名のリストです。 デフォルト値は Noneに設定されています。 | 
| 列(リスト) | このパラメーターは、データベース テーブルから選択される列名のリストです。 このパラメータのデフォルト値は Noneに設定されています。 | 
| チャンクサイズ(int) | このパラメーターは、各チャンクの行数です。 通常、大量のデータを同時に入力するために使用されます。 設定する必要がない場合は、デフォルト値である Noneに設定できます。 | 
| dtype(データ型名) | このパラメーターは、単純なデータ型名、int、bool など、またはデータ型が指定された列の辞書にすることができます。 | 
これらすべてのメソッドの構文:
pandas.read_sql_query(
    sql,
    con,
    index_col=None,
    coerce_float=True,
    params=None,
    parse_dates=None,
    chunksize=None,
    dtype=None,
)
通常、Python スクリプトでは、SQL データベースに読み込むために、このはるかに単純で単純化された方法を使用します。
data_frame_obj = pd.read_sql(query.statement, db_engine)
上記のコード行は、Python スクリプトで定義されたクエリを読み取り、それを Dataframe オブジェクトに読み込みます。
これをどのように適用できるかをよりよく理解するために、このサンプル スクリプトを見てみましょう。
import pandas
import sqlalchemy as db
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
engine = db.create_engine(
    "mysql+pymysql:\
//root:@localhost/jobs"
)
Session = sessionmaker(bind=engine)
session = Session()
class Jobs(Base):
    __tablename__ = "jobs"
    job_id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    description = db.Column(db.String(50))
    status = db.Column(db.String(10))
rows = [
    Jobs(job_id=1, name="add", description="add data to database", status="pending"),
    Jobs(
        job_id=2, name="view", description="view data from database", status="pending"
    ),
    Jobs(
        job_id=3,
        name="search",
        description="search data from database",
        status="pending",
    ),
]
dataFrame = pandas.DataFrame([vars(row) for row in rows])
dataFrame.to_sql("jobs", engine, if_exists="replace")
jobs_df = pandas.read_sql_query(sql=session.query(Jobs).statement, con=engine)
print(jobs_df)
このスクリプトを正常に実行するには、次のライブラリがインストールされていることを確認する必要があります。
- パンダ
- SQL錬金術
- PyMySQL
- ドッカー
これらのライブラリをすべてセットアップしたら、選択したターミナルで次のコマンドを実行して、docker をセットアップします。
docker run --name mysql-db -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -p 3306:3306 -d mysql:5.6
次に、このコマンドでコンテナに入り、データベースを作成します。
docker exec -it mysql-db mysql
次のように create database クエリを実行します。
create database jobs;
環境がセットアップされたので、コンテナを終了して Python スクリプトを実行すると、次の結果が得られます。
出力:

これは、SQLAlchemy ORM を Pandas データフレームに正常に変換したことを意味します。
I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.
LinkedIn