SQlite3和python中的datetime对象

时间:2019-01-03 13:30:10

标签: python sqlite datetime

尝试使用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")

数据库在开始时将开始日期和结束日期作为文本。我想将日期更改为可以开始计算的日期,例如倒数天/晚直到工作完成等。 用户还将输入日期和时间,所以我不能使用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 :(得分:1)

sqlite中没有本地datatype日期。我链接的手册建议(请参阅2.2)三种可能的日期存储方式:

  • TEXT(ISO 8601字符串)
  • REAL(朱利安天数)
  • INTEGER(Unix时间)

我的建议是使用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)

答案 1 :(得分:0)

您可以使用datetime.strtime将字符串转换为日期时间对象

例如

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

SO