import sqlite3 import datetime def adapt_mydt(val): print "ADAPTING", val ret = val.strftime("%Y-%m-%d %H:%M:%S") + (".%(msec)06u" %{'msec': val.microsecond} + val.strftime(" %Z")) return ret def convert_mytimes(val): print "CONVERTING", val dandt = val.split(" ") datepart = dandt[0] timepart = dandt[1] year, month, day = map(int, datepart.split("-")) timepart_full = timepart.split(".") hours, minutes, seconds = map(int, timepart_full[0].split(":")) if len(timepart_full) == 2: microseconds = int(float("0." + timepart_full[1]) * 1000000) else: microseconds = 0 ret = datetime.datetime(year, month, day, hours, minutes, seconds, microseconds) return ret if __name__ == "__main__": sqlite3.register_adapter(datetime.datetime, adapt_mydt) sqlite3.register_converter("TIMESTAMP", convert_mytimes) db = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES) cs = db.cursor() cs.execute("create table demo (alpha timestamp)") cs.executemany( "insert into demo (alpha) values (?)", [ ["2014-02-10 20:00:00.000000 UTC"], [datetime.datetime.now()], ]) for row in cs.execute("select * from demo"): print row """ $ python2.7 demo.py ADAPTING 2014-02-11 10:57:57.154130 CONVERTING 2014-02-10 20:00:00.000000 UTC CONVERTING 2014-02-11 10:57:57.154130 (datetime.datetime(2014, 2, 10, 20, 0),) (datetime.datetime(2014, 2, 11, 10, 57, 57, 154130),) """