PythonのORMの一種であるElixirを使っているとき、直接SQLを書く必要に迫られた時の方法を残します。
※ここではORMを使っているのに直接SQLを書く時の是非は議論しません。
コード
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from elixir import *
days = 10
metadata.bind = "mysql://userid:password@127.0.0.1/test"
setup_all()
sql = """
SELECT DATE_FORMAT( NOW() - INTERVAL %(days)s DAY, '%%Y-%%m-%%d' ) date,
DATE_FORMAT( NOW(), '%%Y-%%m-%%d' ) today
FROM DUAL
"""
conn = metadata.bind.engine.connect()
result = conn.execute( sql, { "days": days } )
for row in result:
print "%sの%d日前: %s" % ( row.today, days, row.date )
実行結果は次の通り。
2014-04-18の10日前: 2014-04-08
補足
実態は、ElixirがラップしているSQLAlchemyのAPIを叩いていることになります。
一昔前のプレースホルダーを使ったSQLの実行方法を知っていると、使いやすいかも知れません。