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にまとまっています。

categories: python, sqlachemy
Read and Post Comments

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')

でもいいんだけどどうするかなぁ。 全部取得してからごにょごにょやってもいいだけど件数が多いときにどうなるのか気になるところ。

ということで、しらべてから後でここに書く

categories: python, sqlachemy
Read and Post Comments

track feed ueblog