如何从字符串到Sqlite表写日期和时间?

时间:2016-05-13 12:22:46

标签: python sql sqlite datetime

我有单字符串格式的日期和时间“2016-03-28T20:23:46 + 0800”。如何将其转换为日期时间格式Sqlite3支持“datetime”域?我正在使用python在数据库中读/写数据。

我知道使用python可以实现:

>>> str = "2016-03-28T20:23:46+0800"
>>> temp = str.split('T')
>>> temp[1] = temp[1].rstrip('+')
>>> temp[1]
'20:23:46+0800'
>>> temp[1] = temp[1].split('+')[0]
>>> result = " ".join(temp)
>>> result
'2016-03-28 20:23:46'

但也许给定的字符串有可转换的格式?

2 个答案:

答案 0 :(得分:1)

在sqlite中不存在

日期时间格式,一种解决方法是使用数字序列作为日期时间,例如:

def Strtime2Num(result):
    date_object = datetime.strptime(Strtime,"%Y-%m-%dT%H:%M%S+0800")
    Strtime = date_object.strftime('%Y%m%d%H%M')
    return int(result)

在sql命令中选择时,可以使用

con.execute(UPDATE YearUpdateCapa SET %s = %d WHERE DateTime >= %d AND DateTime <= %d' % (name, avail,start,end))

答案 1 :(得分:1)

如果您尝试以错误的格式插入时间戳,那么

sqlite3不会产生错误,直到您尝试将值选回 datetime object 。要验证输入日期/时间字符串convert it to datetime.datetime firstsqlite3模块可以自动转换datetime.datetime

#!/usr/bin/env python3
import sqlite3
from datetime import datetime

db = sqlite3.connect(':memory:')
db.execute('CREATE TABLE dates (timestamp TIMESTAMP)')
db.executemany('INSERT INTO dates VALUES(?)', 
               [[datetime.utcnow()], ['2016-03-28 20:23:46.000000+0800']])
print(*db.execute('SELECT timestamp FROM dates'), sep='\n')

输出

('2016-05-14 05:08:52.487113',)
('2016-03-28 20:23:46.000000+0800',)

TIMESTAMP字段接受ISO 8601格式'YYYY-MM-DD HH:MM:SS.mmmmmm'datetime.datetime对象的字符串。

To return datetime.datetime() back, you could use detect_types=sqlite3.PARSE_DECLTYPES(如果您需要时区支持; define your own converter返回时区感知日期时间对象。)