Шаг 209.
Основы языка Python.
Доступ к базе данных SQLite из Python. Сохранение в таблице даты и времени

    На этом шаге мы рассмотрим особенности выполнения этой операции.

    В SQLite нет специальных типов данных для представления даты и времени. Поэтому обычно дату преобразовывают в строку или число (количество секунд, прошедших с начала эпохи) и сохраняют в соответствующих полях. При выводе данные необходимо опять преобразовывать. Используя знания, полученные в предыдущих шагах, можно зарегистрировать две функции преобразования:

# -*- coding: utf-8 -*-
import sqlite3, datetime, time

# Преобразование даты в число
def my_adapter(t):
    return time.mktime(t.timetuple())

# Преобразование числа в дату
def my_converter(t):
    return datetime.datetime.fromtimestamp(float(t))

# Регистрируем обработчики
sqlite3.register_adapter(datetime.datetime, my_adapter)
sqlite3.register_converter("mytime", my_converter)

# Получаем текущую дату и время
dt = datetime.datetime.today()
con = sqlite3.connect(":memory:", isolation_level=None,
                      detect_types=sqlite3.PARSE_COLNAMES)
cur = con.cursor ()
cur.execute("CREATE TABLE times (time)")
cur.execute("INSERT INTO times VALUES (?)", (dt,))
cur. execute ("""SELECT time as "t [mytime]" FROM times""")
print(cur.fetchone()[0]) # Результат
con.close ()
input()
Архив с файлом можно взять здесь.

    Результат работы приложения:

2018-11-19 09:54:43

    Модуль sqlite3 для типов date и datetime из модуля datetime содержит встроенные функции для преобразования типов. Для datetime, date зарегистрирован тип date, а для datetime.datetime - тип timestamp. Таким образом, создавать пользовательские функции преобразования не нужно. Пример сохранения в таблице даты и времени приведен ниже:

# -*- coding: utf-8 -*-
import sqlite3, datetime

# Получаем текущую дату и время
d = datetime.date.today()
dt = datetime.datetime.today()
con = sqlite3.connect(":memory:", isolation_level=None,
                      detect_types=sqlite3.PARSE_DECLTYPES)
cur = con.cursor()
cur.execute("CREATE TABLE times (d date, dt timestamp)")
cur.execute("INSERT INTO times VALUES (?, ?)", (d, dt))
cur.execute("SELECT d, dt FROM times")
res = cur.fetchone()
print(res[0])
print(res[1])
input ()    
Архив с файлом можно взять здесь.

    Результат работы приложения:

2018-11-19
2018-11-19 10:04:10.056000

    На следующем шаге мы рассмотрим обработку исключений.




Предыдущий шаг Содержание Следующий шаг