SQLAlchemyのselect
March 26, 2007 at 09:29 PM | View Comments最近Django以外でPythonからDBを扱うのにSQLAlchemyを使うようにしているのだけど、
SELECT * FROM table_name WHERE hoge IN ("huga", "foo");
のような INの書き方がぱっと出なかったのでメモ。
bar = db.table_name.select(db.table_name.c.hoge.in_("huga", "foo"))
のように書きます。ほかにも
bar = db.table_name.select(db.table_name.c.hoge.between(0, 100))
bar = db.table_name.select(db.table_name.c.hoge.startswith("huga"))
bar = db.table_name.select(db.table_name.c.hoge.endswith("huga"))
bar = db.table_name.select(db.table_name.c.hoge.like("%huga%"))
bar = db.table_name.select(func.substr(db.table_name.c.hoge, 2, 1) == "h")
あたりは忘れそう。。。。
ドキュメントの A step-by-step SQLAlchemy tutorial のSelect Statementsにまとまっています。
SQLAlchemyのGroupby
March 18, 2007 at 04:20 PM | View Commentsぜんぜん進まないSQLAlchemyの勉強ですが、理解してから書くといつになるか分からないので 分からないなりに書いてしまおうかと思います。
単純にcountするだけなら
from sqlalchemy.ext.sqlsoup import SqlSoup
db = SqlSoup("mysql://username:password@localhost/dbname")
count = db.table_name.count(db.table_name.c.col_name=="hoge")
# or
count = db.table_name.count_by(colname="hoge")
みたいな感じいいのだけど
select hoge, count(*) from table_name group by 1
みたいのをどうするかよく分からない。
rp = db.engine.execute('select hoge, count(*) from table_name group by 1')
でもいいんだけどどうするかなぁ。 全部取得してからごにょごにょやってもいいだけど件数が多いときにどうなるのか気になるところ。
ということで、しらべてから後でここに書く