2014-01-11 7 views
0

Я хотел был бы преобразовать datetime, котор я выбираю от моей базы данных sqlite3 в unixepoch. Простым способом было бы, по-моему, вставить временные метки в мою базу данных в unixepoch, но я бы предпочел, поскольку это делает мою базу данных менее удобочитаемой.Преобразование sqlite3 timestamp в эпоху в python

conn = sqlite3.connect('test.db') 
c = conn.cursor() 
c.execute('CREATE TABLE if not exists table_name (datetime text, column1 real, column2 real)') 
cur.execute("INSERT INTO table_name VALUES (datetime(CURRENT_TIMESTAMP, 'localtime'),?,?)", data) 
c.execute("SELECT datetime from table_name") 

#here I would like to convert the above selection (datetime in localtime) to unixepoch 

Благодарим за внимание!

ответ

1

sqlite3 база уже поставляется с адаптером для интерпретации форматов даты и времени ISO в datetime.datetime() objects:

c.execute('SELECT datetime as "datetime [timestamp]" from table_name') 
for datetime, in c: 
    print type(datetime) 

Это будет печатать <type 'datetime.datetime'> для каждой строки. datetime.datetime() объекты намного более гибкие и мощные, чем смещения эпохи UNIX.

Следует отметить псевдоним as "datetime [timestamp]"; это добавляет информацию о типе в столбец, переопределяя тип text для этого столбца в определении CREATE TABLE, позволяя Python применять адаптер типа. Если объявить столбец как timestamp вы даже не должны сделать ваш запрос использовать псевдоним:

c.execute('CREATE TABLE if not exists table_name (datetime timestamp, column1 real, column2 real)') 

Если есть использовать коррекции эпох UNIX, вы можете конвертировать их с time.mktime() function и datetime.datetime.timetuple() method:

timeoffset = time.mktime(datetime.timetuple()) 
Смежные вопросы