pythondatetimesqlite

How to read datetime back from sqlite as a datetime instead of string in Python?


I'm using the sqlite3 module in Python 2.6.4 to store a datetime in a SQLite database. Inserting it is very easy, because sqlite automatically converts the date to a string. The problem is, when reading it it comes back as a string, but I need to reconstruct the original datetime object. How do I do this?


Solution

  • If you declare your column with a type of timestamp, you're in clover:

    >>> db = sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_DECLTYPES)
    >>> c = db.cursor()
    >>> c.execute('create table foo (bar integer, baz timestamp)')
    <sqlite3.Cursor object at 0x40fc50>
    >>> c.execute('insert into foo values(?, ?)', (23, datetime.datetime.now()))
    <sqlite3.Cursor object at 0x40fc50>
    >>> c.execute('select * from foo')
    <sqlite3.Cursor object at 0x40fc50>
    >>> c.fetchall()
    [(23, datetime.datetime(2009, 12, 1, 19, 31, 1, 40113))]
    

    See? both int (for a column declared integer) and datetime (for a column declared timestamp) survive the round-trip with the type intact.