2009-11-28
■ [sqlite]PythonからSQLite3への日付型変数の登録

PythonからSQLiteにデータを登録するに当たり,datetime.date型とdatetime.datetime型をISO日付形式,ISO タイムスタンプ形式に変換する適合関数がデフォルトで登録されている.それ以外の形式に,あるいはそれ以外の型を適切な型に変換して登録したいときには適当な適合関数を書いて登録すればよい。
import sqlite3 import datetime, time sqlite3.connect(":memory:") cur = con.cursor() cur.execute("select ?", (datetime.datetime.now(),)) print(cur.fetchone()[0])
2009-11-28 11:56:02.498758
sqlite3の日付処理関数については以前にまとめたけど再び。
日付処理関数はstrftime, datetime, date, time, Juliandayがあって、このうち datetime, date, time, Juliandayはそれぞれstrftimeの特別な場合。
書式はstrftime(format, timestring, [modifier, ...]),datetime(timestring, [modifier, ...])など。
modifierにutcを指定した場合は,与えられたtimestringをローカルタイムゾーンでの日時として解釈しUTCの日時に変換して表示する.ローカルタイムゾーンがJSTの場合はtimestringから9時間引かれた時間が返る.
逆にlocaltimeを指定した場合は与えられたtimestringをUTCでの日時として解釈しローカルタイムゾーンの日時に変換して表示する。ローカルタイムゾーンがJSTの場合はtimestringに9時間たされた時間が返る.
cur.execute("select date(?)", (datetime.datetime.now(),))
print(cur.fetchone()[0])
2009-11-28
cur.execute("select time(?)", (datetime.datetime.now(),))
print(cur.fetchone()[0])
11:59:48
cur.execute("select datetime(?)", (datetime.datetime.now(),))
print(cur.fetchone()[0])
2009-11-28 11:59:48
cur.execute("select datetime(?, 'utc')", (datetime.datetime.now(),))
print(cur.fetchone()[0])
2009-11-28 02:59:29
cur.execute("select datetime(?, 'localtime')", (datetime.datetime.now(),))
print(cur.fetchone()[0])
2009-11-28 20:59:11
コメントを書く
トラックバック - http://chick.g.hatena.ne.jp/allegro/20091128