Как читать datetime обратно из sqlite как datetime вместо строки в Python?
Я использую модуль sqlite3 в Python 2.6.4 для хранения datetime в базе данных SQLite. Вставить его очень легко, потому что sqlite автоматически преобразует дату в строку. Проблема в том, что при чтении он возвращается как строка, но мне нужно восстановить исходный объект datetime. Как мне это сделать?
3 ответа:
Если вы объявите свой столбец с типом метки времени, вы в Клевере:
>>> 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))]
посмотреть? как int (для столбца, объявленного целым числом), так и datetime (для столбца, объявленного меткой времени) выживают в цикле с неповрежденным типом.
оказывается, что sqlite3 может это сделать, и это даже документирована, вид - но это довольно легко пропустить или неправильно понять.
что я должен был сделать это:
- передать sqlite3.PARSE_COLNAMES опция в поле .connect () вызов, например.
conn = sqlite3.connect(dbFilePath, detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
введите тип, который я хотел в запрос - и для datetime, это на самом деле не "datetime", но "метка времени":
sql = 'SELECT jobid, startedTime as "[timestamp]" FROM job' cursor = conn.cursor() try: cursor.execute(sql) return cursor.fetchall() finally: cursor.close()
Если я передаю "datetime" вместо этого он молча игнорируется, и я все еще получаю строку обратно. То же самое, если я опущу кавычки.