Slide 1

Slide 1 text

SQLAlchemy の select(User).where(User.id =="123") を理解してみる👀 ヲクラ

Slide 2

Slide 2 text

select(User).where(User.id =="123")

Slide 3

Slide 3 text

select(User).where(User.id =="123") SELECT * FROM `User` WHERE id = '123'

Slide 4

Slide 4 text

SELECT * FROM `User` WHERE id = '123' select(User).where( User.id =="123" )

Slide 5

Slide 5 text

select(User).where( User.id =="123" ) True/False 🤔 ⚠これは誤った解釈です

Slide 6

Slide 6 text

select(User).where( True) User.idの情報が 消えてない?? ⚠これは誤った解釈です

Slide 7

Slide 7 text

自己紹介
 3l4i5 3l4l5 - クロスマート株式会社 - 請求書チーム - テックリード - バックエンドエンジニア - 趣味 - ⛰登山 - 📚マンガ 往蔵隆成(ヲクラ)

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

バックエンド フロントエンド その他 CI/CD データベース 使用技術(抜粋)

Slide 10

Slide 10 text

本題

Slide 11

Slide 11 text

今日の目標 select(User).where(User.id =="123") SELECT * FROM `User` WHERE id = '123' の変換で何が起きてるのか知ろう

Slide 12

Slide 12 text

● Python製のORM ● SQLの全機能をPythonを用いて 表現することができる SQLAlchemyとは?

Slide 13

Slide 13 text

Pythonの演算子オーバーロード

Slide 14

Slide 14 text

● +, /, - などの基本的な演算子を 自分で定義した処理で上書きするこ とができる機能 ● 右の例では、valueというフィールド を持つSampleクラス同士の足し算を 上書きしている Pythonの演算子オーバーロード

Slide 15

Slide 15 text

Pythonの演算子オーバーロード ● タネは、__add__ メソッドに処理を 書くことで、"+"の振る舞いを独自に 定義することができる ● __sub__ なら "-" ● __eq__ なら "=="

Slide 16

Slide 16 text

Pythonの演算子オーバーロード ● タネは、__add__ メソッドに処理を 書くことで、"+"の振る舞いを独自に 定義することができる ● __sub__ なら "-" ● __eq__ なら "=="

Slide 17

Slide 17 text

User.id =="123" User.idのclassの__eq__を上書きして "id = 123"に変換する処理をかけばいい! 😮

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

__eq__メソッドによって "=="の処理を上書き

Slide 20

Slide 20 text

__eq__メソッドによって "=="の処理を上書き "==" の演算からWHERE句の 構成部分を返却

Slide 21

Slide 21 text

結論!

Slide 22

Slide 22 text

select(User).where( User.id =="123" ) True/False 🤔 ⚠これは誤った解釈です

Slide 23

Slide 23 text

select(User).where( User.id =="123" ) True/False 🤔

Slide 24

Slide 24 text

"id = '123'" を意味するものに変換される select(User).where( User.id =="123" )

Slide 25

Slide 25 text

「あ、これもか」シリーズ

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

「いつ使うの?」シリーズ

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

ありがとうございました!