Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

SQLAlchemyでDB固有の関数を実行する

難しいことはありませんでした。

以下はMySQLのtruncateという切り捨ての関数を使う例です。

rs = Item.query.\
  filter(Item.maker_id == param['maker_id']).\
  filter(func.truncate(Item.gedai / Item.price, 1) < 0.6).all()

SQLAlchemyのfuncオブジェクトは空気が読めるナイスガイなので、funcの後にDB関数名をそのまま書いて実行することが出来ます。

上記の例ですと、「truncate(items.gedai / items.price, %s) < %s」というSQLに変換されて実行してくれます。

また、SQLAlchemyのORMapperが生成されたSQLを確認するには、下記のように行います。Queryオブジェクトを引数に取ります。

def print_sql(query):
    '''
    debug用途でSQL文を吐き出す
    '''
    from sqlalchemy.dialects import mysql
    print(query.statement.compile(dialect=mysql.dialect()))

I ♥ SQLAlchemy!! Yummy!!