質問: query % args TypeError: not all arguments converted during string formatting ちなみに cursor.execute("DELETE FROM testtbl WHERE time < '2017-10-02 23:30:00'") だと動きますし print timestamp とやっても'2017-10-02 23:30:00' と表示されますし いったい何がダメなんでしょうか。 もちろん データベースtesttblテーブルのtimeはタイムスタンプ型です。 宜しくお願いします。
回答: ("...where time < %s",(timestamp)) のようにtimestampを()でくるんでtupleにする ("...where time < '%s'",timestamp) のように%sを''でくるむ のどちらかでかいけつしませんかね? 後者のような気もしますが 追記 ("...where time < %s",(timestamp,)) こうするのが正解っぽい。 "query include %s" % arg みたいなことしてると、 argに不正な文字列が仕込まれたときにSQL Injectionが起きる可能性があるので cursor.execute("query include %s", args) を利用したほうが安全なことが多いです。 (cursor.execute内部で argsを安全なものに変換してくれる可能性が高いため) PEPによると argsはシーケンスかマップなので、 [timestamp]と配列にするか(timestamp,)とtupleにする必要があったっぽいですね。