62 votes

Lecture de date / heure depuis sqlite en tant que date / heure en Python

J'utilise le module sqlite3 de Python 2.6.4 pour stocker une date / heure dans une base de données SQLite. Il est très facile de l'insérer, car sqlite convertit automatiquement la date en chaîne. Le problème est que, lorsque vous le lisez, il revient sous forme de chaîne, mais je dois reconstruire l'objet datetime d'origine. Comment puis-je faire cela?

106voto

Alex Martelli Points 330805

Si vous déclarez votre colonne avec un type d'horodatage, vous êtes dans le trèfle:

 >>> 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))]
 

Voir? int (pour une colonne déclarée entière) et datetime (pour une colonne déclarée timestamp) survivent à l'aller-retour avec le type intact.

21voto

EMP Points 17246

Il s'avère que sqlite3 peut le faire, et c'est même documenté, genre de mais il est assez facile de manquer ou de ne pas comprendre.

Ce que j'avais à faire:

  • Passer le sqlite3.PARSE_COLNAMES option dans le .appel connect (), par exemple.
conn = sqlite3.connect(dbFilePath, detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
  • Mettre le type que je voulais dans la requête et pour le type datetime, ce n'est pas vraiment "datetime", mais "timestamp":

    sql = 'SELECT jobid, startedTime as "[timestamp]" FROM job'
    
    
    cursor = conn.cursor()
    try:
        cursor.execute(sql)
        return cursor.fetchall()
    finally:
        cursor.close()
    

Si je passe en "datetime" c'est plutôt ignorées silencieusement et je reçois toujours une chaîne de retour. Même si je omettre les guillemets.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X