データベースから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[,…])
sql | SQL文字列 |
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
Pythonのスキルを使って毎月の収入源を増やすのが最適なんじゃないかという件
実際、今のスキルに合わせて仕事を獲得し、スキマ時間で毎月+5、+20、+70万円くらいの人が多いです。
必要なスキル、仕事の獲得までの流れは以下の記事で徹底解説しています。
(もちろん全部無料です)
空いた時間にぜひ参考にしてみてください。
今回参考にしたページ・資料
pandas.read_sql — pandas 1.3.3 documentation