объекты datetime в SQlite3 и python - PullRequest
0 голосов
/ 03 января 2019

Попытка сохранить дату и время в моем проекте базы данных, используя python и sqlite3. Вот что у меня пока ...

import sqlite3

def connect():
    conn = sqlite3.connect("road_works.db")
    cur = conn.cursor()
    cur.execute("""CREATE TABLE IF NOT EXISTS road_works(id INTEGER PRIMARY 
        KEY, location TEXT, client TEXT, start_date TEXT, end_date TEXT)""")
    conn.commit()
    conn.close()


def insert(location, client, start_date, end_date):
    conn = sqlite3.connect("road_works.db")
    cur = conn.cursor()
    cur.execute("INSERT INTO road_works VALUES (NULL, ?, ?, ?, ?)",
               (location, client, start_date, end_date))
    conn.commit()
    conn.close()

insert("M25", "Lindor", "2019-03-16 20:00", "2019-07-16 06:00")

В тот момент, когда база данных принимает start_date и end_date как текст. Я хочу изменить это на даты, которые я могу затем начать делать вычисления, например, отсчет дней / ночей до завершения работы и т. Д. Пользователь также будет вводить даты и время, поэтому я не могу использовать datetime.datetime.now () / today () Я читал в datetime, но он более продвинут, чем я привык, если бы кто-то мог объяснить это лучше, я был бы признателен.

Я искал решение в течение нескольких дней, это мой первый проект, он может быть немного вне моей лиги, но я ценю ваше внимание.

Спасибо:)

исправлена! Спасибо за помощь!

def insert(location, client, start_date, end_date):
    conn = sqlite3.connect("road_works.db")
    cur = conn.cursor()
    cur.execute("INSERT INTO road_works VALUES (NULL, ?, ?, ?, ?)",
                (location, client, start_date, end_date))
    start_date = datetime.strptime(start_date, "%Y-%m-%d %H:%M")
    end_date = datetime.strptime(end_date, "%Y-%m-%d %H:%M")
    conn.commit()
    conn.close()

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Нет собственного типа данных для дат в sqlite. Руководство, на которое я ссылаюсь, советует (см. 2.2) три возможных способа сохранить дату:

  • ТЕКСТ (строка ISO 8601)
  • REAL (юлианские числа дня)
  • INTEGER (Unix Time)

Я бы предложил использовать формат ISO 8601, поскольку он стандартизирован и однозначен. Кроме того, в отличие от альтернатив, он читается человеком без преобразования. И datetime объекты имеют стандартные методы преобразования в и из строки для него.

См. Примеры ниже:

In [1]: from datetime import datetime                                                                    

In [2]: now = datetime.now()                                                                             

In [3]: now                                                                                              
Out[3]: datetime.datetime(2019, 1, 3, 14, 53, 38, 596477)

In [4]: string = now.isoformat()                                                                         

In [5]: string                                                                                           
Out[5]: '2019-01-03T14:53:38.596477'

In [6]: datetime.fromisoformat(string)                                                                   
Out[6]: datetime.datetime(2019, 1, 3, 14, 53, 38, 596477)
0 голосов
/ 03 января 2019

Вы можете использовать datetime.strtime для преобразования строки в объект datetime

, например

from datetime import datetime
datetime_object = datetime.strptime('2019-03-16 20:00', '%Y-%m-%d %H:%M')

SO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...