Python Tech

Python SQLAlchemy ORMクエリ結果をDataFrameへ変換する方法

データベースからSELECTしてDataFrameを生成するには、pandas.read_sql() にSQL文字列を渡すだけですが、sqlalchemy.orm ではどうすればいいでしょうか?

結論は、statementからSQL文を取得しread_sql()に渡せばOKです。

この記事では、PythonのSQLAlchemy (ORM)を使って、データベースのレコードをpandas.DataFrameとして取得する方法を解説しています。

 

実行環境

$ python --version
Python 3.9.2

$ pip freeze
pandas==1.2.3
PyMySQL==1.0.2
SQLAlchemy==1.4.5

MySQL 5.7.35

 

ORMクエリ結果をDataFrameで取得

session.query() でQueryを作成します。

q = session.query(User).filter(User.affiliation == "IT")

 

Query.statement メンバにSQL文が入っているのでこれを利用します。

print(q.statement)
# SELECT users.id, users.name, users.affiliation, users.job_title, users.expertise, users.birthday 
# FROM users 
# WHERE users.affiliation = :affiliation_1

 

pandas.read_sql() でSQLの実行結果をDataFrameへ変換します。

pandas.read_sql(sql, con[,…])

sqlSQL文字列
conコネクター(sqlalchemy.engine.Engine)

sqlには先ほど取得したstatement、conにはデータベース情報が設定されたEngineを渡します。

df = pd.read_sql(q.statement, session.bind)
print(df)
#    id    name affiliation          job_title            expertise
# 0  14   Logan          IT  Food Technologist  Conflict Resolution
# 1  28  Martin          IT          Webmaster      Self-motivation
# 2  29    Ally          IT     HR Coordinator             Learning

 

今回参考にしたページ・資料

pandas.read_sql — pandas 1.3.3 documentation

 

  • この記事を書いた人

次世代ペンギン

長いのでペンギンとお呼びください。システム開発・プログラミングのお仕事をしています。甘味とコーヒーは生命線。多くの人に役立つ情報のシェアが目標です。

人気の記事

1

会社員でプログラマーとして働いている人、インフラやネットワークのエンジニアとして働いている人の中には、フリーランスのプログラマーとして独立、もしくは転向したい人もいるので ...

2

キャリアアップのため、または高収入を目指して、しっかりプログラミングを学びたいという人が増えてきましたね。 この記事では現役のエンジニアである私が、実際に仕事で稼げるよう ...

3

フリーランスのプログラマーにとって収入の向上に最も直結するのはスキルです。 必要なスキル、スキルの獲得方法が気になる人も多いでしょう。 また、これからフリーランスを目指す ...

4

Vuetifyの v-progress-circular コンポーネントは、数値データや処理状況を環状(円状)のデザインで教えてくれるUIデザインです。 ローディングのス ...

5

Vuexのstore(ストア)を使うと、各コンポーネント間で個別にデータのやり取りすることなく、データを一元的に管理できます。Vueでは欠かせない機能といえるでしょう。 ...

-Python, Tech
-, , ,

© 2021 ペンギンのーと