Simple Way with Django + SQLAlchemy
AT PyCon JP 2020
https://pycon.jp/2020/timetable/?id=203756
質疑応答
> Ryuji Tsutsui から全員に: 02:58 PM
> INNNER JOIN
> Nが1個多い?
ほんとだ。slideshareにあげた資料、直せません!
> Taku Shimizu から全員に: 03:00 PM
> 「ドキュメントに記載されていない」なかなかのパワーフレーズですね
でしょー
> uranusjr から全員に: 03:04 PM
> g2の別名はT3になるのはなぜですか?
Djangoが自動的にテーブルを2回JOINすることもあって、そういう場合自動的にテーブル名の別名が付けられます。T2,T3,T4と連番で増えていきます。
たぶん、登場する3つ目のテーブルだからT3なのだと思います。
`annotate(g2=FilteredRelation(...)` のように名前指定しているのに使われないのは、バグなのかどうなのか追ってません。SQLは動作するので、バグとはいえないかも。
> Manabu から全員に: 03:17 PM
> SQLAlchemy の モデルクラスを直接書いていましたが、 automap_base() は使わないのですか?
全テーブルを使いたいわけではないのと、用途の目的から、SQLAlchemyでForeignKeyを独自に追加定義したいなどもあるため、個別に書いています。
automap_base()を使っても良いと思います。
> c-bata から全員に: 03:19 PM
> DBのマイグレーションはalembicを使う感じでしょうか?
Dango ORM側で全てマイグレーションするか、それ以外(alembicや生DDL)でマイグレーションするかは統一すればよいと思います。
Django ORM側でやるのが楽だと思いますが、Redshiftなどの場合生DDLでやるしかなかったりするし、そういう環境でこそこの方法が有用だったりします。
> あ、基本的にDjango ORMを使っていて、難しいクエリだけSQLALchemyで
SQL生成している感じですかね。
はい。そういう感じです。