import sqlite3 import datetime import sys def adapt_mydt(val): print("ADAPTING", val, type(val)) ret = val.strftime("%Y-%m-%d %H:%M:%S") + (".%(msec)06u" %{'msec': val.microsecond} + val.strftime(" %Z")) print('RETURNING', ret, type(ret)) return ret def convert_mytimes(val): print("CONVERTING", val, type(val)) dandt = val.split(b" ") datepart = dandt[0] timepart = dandt[1] year, month, day = map(int, datepart.split(b"-")) timepart_full = timepart.split(b".") hours, minutes, seconds = map(int, timepart_full[0].split(b":")) if len(timepart_full) == 2: microseconds = int(float(b"0." + timepart_full[1]) * 1000000) else: microseconds = 0 ret = datetime.datetime(year, month, day, hours, minutes, seconds, microseconds) return ret if __name__ == "__main__": print ("sys.version") print (sys.version) print("sqlite3.version") print(sqlite3.version) print("sqlite3.sqlite_version") print(sqlite3.sqlite_version) sqlite3.register_adapter(datetime.datetime, adapt_mydt) sqlite3.register_converter("TIMESTAMP", convert_mytimes) db = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES) cs = db.cursor() cs.execute("create table demo (alpha timestamp)") cs.execute("create table demoB (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 alpha as 'alpha [timestamp]' from demo union all select alpha from demoB order by alpha"): print(row) """ sys.version 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:38:22) [MSC v.1600 32 bit (Intel)] sqlite3.version 2.6.0 sqlite3.sqlite_version 3.8.3.1 ADAPTING 2014-07-09 08:03:35.390625 RETURNING 2014-07-09 08:03:35.390625 CONVERTING b'2014-02-10 20:00:00.000000 UTC' CONVERTING b'2014-07-09 08:03:35.390625 ' (datetime.datetime(2014, 2, 10, 20, 0),) (datetime.datetime(2014, 7, 9, 8, 3, 35, 390625),) """