Sto utilizzando il modulo sqlite3 in Python 2.6.4 per archiviare un datetime in un database SQLite. Inserirlo è molto semplice, perché sqlite converte automaticamente la data in una stringa. Il problema è che, leggendolo, torna come una stringa, ma ho bisogno di ricostruire l'oggetto datetime originale. Come faccio a fare questo?Come leggere datetime back da sqlite come un datetime anziché una stringa in Python?
risposta
Se si dichiara la colonna con un tipo di timestamp, sei in trifoglio:
>>> 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))]
Vedi? sia int (per una colonna dichiarata integer) che datetime (per una colonna dichiarata timestamp) sopravvivono al round-trip con il tipo intatto.
Si scopre che sqlite3 può fare questo ed è anche documented, una specie di - ma è piuttosto facile perdere o fraintendere.
Quello che ho dovuto fare è:
- Passare i sqlite3.PARSE_COLNAMES opzione nella chiamata .connect(), ad esempio.
conn = sqlite3.connect(dbFilePath, detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
messo il tipo che volevo nella query - e per datetime, non è in realtà "datetime", ma "timestamp":
sql = 'SELECT jobid, startedTime as "[timestamp]" FROM job' cursor = conn.cursor() try: cursor.execute(sql) return cursor.fetchall() finally: cursor.close()
Se passassi in "datetime", invece, viene silenziosamente ignorato e ottengo ancora una stringa indietro. Lo stesso se ometto le virgolette.
Hm, sarebbe si prega di mostrare un po 'di codice ? Non riesco a farlo funzionare ... – unutbu
nota che è decisamente '" [timestamp] "', '[timestamp]' viene silenziosamente ignorato, e '.fetchone' inoltre non converte i tipi. Che biblioteca strana. –
Nota: In python3, ho dovuto cambiare il codice SQL in qualcosa di simile:
SELECT jobid, startedTime as "st [timestamp]" FROM job
(. Ho dovuto nominare esplicitamente la colonna)
- 1. Come archiviare datetime in SQLite
- 2. come convertire una stringa datetime in oggetto datetime?
- 3. Ottieni il mese da DATETIME in sqlite
- 4. datetime da stringa in Python, formato stringa best-guessing
- 5. python "import datetime" v.s. "Da datetime import datetime"
- 6. perl come convertire una stringa in Datetime?
- 7. Conversione stringa di datetime a datetime in NumPy (python)
- 8. Stringa da DateTime Oggetto
- 9. Come inserire datetime con timezone in SQLite?
- 10. Convertire relativa stringa datetime in oggetto DateTime
- 11. Come analizzare una stringa in un oggetto DateTime in Perl?
- 12. Come convertire la stringa in formato datetime in pandas python?
- 13. Parsing datetime in Python ..?
- 14. Recupero datetime Sqlite-net
- 15. formato una stringa datetime in volta solo
- 16. Come convertire una stringa di data in un oggetto DateTime?
- 17. Come convertire un Datetime .Net in un datetime T-SQL
- 18. Come posso rendere SQLite restituire un DateTime corretto quando si esegue ISQLQuery.UniqueResult <DateTime>()?
- 19. Come posso confrontare una data e un datetime in Python?
- 20. Come posso convertire una stringa datetime in un timestamp UNIX in SQLite3?
- 21. Conversione da DateTime a stringa in Julia
- 22. Come convertire DateTime? a DateTime
- 23. Come si converte un datetime ingenuo in datetime in DST-aware in Python?
- 24. Come convertire `ctime` in` datetime` in Python?
- 25. Come estrarre l'anno da un oggetto datetime Python?
- 26. Come si sottrae da un datetime?
- 27. come creare datetime da un'epoca negativa in Python
- 28. Come convertire un datetime in stringa in T-SQL
- 29. conversione di una stringa a datetime da "yyyy-MM-dd"
- 30. Come posso aggiungere N millisecondi per un datetime in Python
Grazie, Alex, funziona! Sono sorpreso da questo, perché non c'è alcuna menzione del tipo TIMESTAMP su http://www.sqlite.org/datatype3.html – EMP
@Evgeny, vedi http://docs.python.org/library/sqlite3 .html # default-adapters-and-converters - non è documentato su sqlite.org perché è effettivamente implementato nel livello Python, non in sqlite stesso! –
Ho appena scoperto che è il parametro __detect_types = sqlite3.PARSE_DECLTYPES__ della funzione connect che fa restituire a un datetime. Se lo ometti, avrai un oggetto unicode. – Ponytech