SQLAlchemyでjoinする
2017/07/23
PythonのSQLAlchemyでMySQLのテーブルをjoinするときの覚書です。
モデルクラスはこんな感じでrelationを書いておきます。
例として社員マスタテーブルと給与支払テーブルのrelationとします。
models.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.sql.schema import Column from sqlalchemy.orm import relation from sqlalchemy.schema import ForeignKey from sqlalchemy.dialects.mysql.base import ( VARCHAR, INTEGER, BIGINT ) Base = declarative_base() class Employee(Base): __tablename__ = 'employee' employee_id = Column(INTEGER(unsigned=False), primary_key=True,nullable=True) name = Column(VARCHAR(length=45), nullable=False) payroll_payment = relation( 'PayrollPayment', backref = 'employee', order_by = 'PayrollPayment.employee_id' ) def __repr__(self): return '<Employee(%d, %s)>' % (self.employee_id, self.name) class PayrollPayment(Base): __tablename__ = 'payroll_payment' payroll_payment_id = Column(INTEGER(unsigned=False), primary_key=True,nullable=True) employee_id = Column( INTEGER(unsigned=False), ForeignKey('employee.employee_id'), nullable=False ) salary = Column(BIGINT(unsigned=True), nullable=False) salary_month = Column(INTEGER(unsigned=True), nullable=False) |
この例ではouter joinとして結合します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
## configとかは省略します url = 'mysql+pymysql://' + config.db_username + ':' + config.db_password + '@' + config.db_host + '/' + config.db_name + '?charset=utf8' engine = create_engine(url,echo=True) Session = sessionmaker(bind=engine) session = Session() employee_tbl = models.Employee result = session.query( employee_tbl.employee_id, employee_tbl.name ).outerjoin( employee_tbl.payroll_payment ).all() |
最近、こちらのSQLAlchemyでシンプルにjoinするという記事も書きました。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
SendGrid(Python)で添付ファイル付きのメールを送信する
SendGridを使って添付ファイル付きのメールを送信するサンプルをPython …
-
-
Apple Silicon M1 MacBook ProにJupyter Notebookをインストールしました
Python – Jupyter NotebookをMac M1 搭 …
-
-
個人のGoogleカレンダーの予定をPythonで取得する
Google Calendar Twilio ReminderのGoogleカレ …
-
-
SQLAlchemy Session.executeでinsertしてAUTO INCREMENTでセットされたプライマリキーを取得したい
PythohのORMライブラリSQLAlchemyでMySQLにインサートしたレ …
-
-
「MonotaRo Tech #3 テスト自動化」に行ってきました
モノタロウさんの「MonotaRo Tech #3 テスト自動化」に行ってきまし …
-
-
SQLAlchemyのModelクラスをMySQLから自動生成する
SQLAlchemyのMySQLモデルを書くのが面倒で、きっと何かツールがあるの …
-
-
Rocket.ChatのAPIでユーザーを一括登録する
Rocket.Chatの管理画面にインポートのメニューはあって、どうやらuser …
-
-
Python SQLAlchemy MySQLでcase文を使う
PythohのORMライブラリSQLAlchemyでMySQLのテーブルSele …
-
-
Pepper 開発 ワークショップ初級~中級~番外編に1日で一気に参加した
Pepperの開発方法が知りたかったので、Pepperアトリエ秋葉原 with …
-
-
docomo Developer supportの 雑談対話APIから自然対話APIへ移行しました
LINEやSlackのbotで重宝していた、雑談対話APIが終了する、とのことで …