SQLAlchemy 続き

普通にSELECT文。

まずは適当にテーブルを作ってデータを適当に投入。


mysql> select * from maker;

                              • +
id name
                              • +
1 SOMY
2 MEC
3 HiTouth
                              • +


mysql> select * from goods;

                                                                                                        • +
id maker_id name
                                                                                                        • +
1 1 Walkman
2 1 AIBO
3 1 PSP
4 2 PC-FX
5 2 スパコン
6 3 パンポン
7 3 気になる木
                                                                                                        • +

Tableインスタンスマッピングするクラスを定義してある状態で...


for obj in sess.query(Maker).order_by(Maker.id):
print obj.id, obj.name

1 SOMY
2 MEC
3 HiTouth

という感じでSELECT。

この場合、実際にバックグラウンドで実行されるSQL

SELECT maker.id AS maker_id, maker.name AS maker_name 
FROM maker ORDER BY maker.id
こんな感じ。

次はSQLでいうとこのWHERE。


for obj in sess.query(Goods).filter_by(maker_id=1).order_by(Goods.id):
print obj.id, obj.maker_id, obj.name
1 1 Walkman
2 1 AIBO
3 1 PSP

別の書き方。


for obj in sess.query(Goods).filter(Goods.maker_id==1).order_by(Goods.id):
print obj.id, obj.maker_id, obj.name
結果はさっきと同じ。

LIKEを使う


for obj in sess.query(Maker).filter(Maker.name.like('%M%')).order_by(Maker.id):
print obj.id, obj.name

複数条件(AND)


from sqlalchemy import and_
for obj in sess.query(Goods).filter(and_(Goods.maker_id<3, Goods.name.like('%FX%'))).order_by(Goods.id):
print obj.id, obj.maker_id, obj.name