我用SQLite Date Browse
应用程序创建了一个表...
当我想从timestamp
列中检索datetime
值时,SQLite返回unicod类型...
这是我的插入代码:
def Insert(self,mode,path,vname,stime,ftime):
con = sqlite3.connect(PATH_DataBase) # @UndefinedVariable
con.execute('INSERT INTO SendList VALUES(?,?,?,?,?)',(mode,path,vname,stime,ftime))
con.commit()
con.close()
dt1 = datetime.datetime(2013,01,01,01,01,01,0)
dt2 = datetime.datetime(2015,01,01,01,01,01,0)
c = 0
for f in os.listdir('/home/abbas/test/'):
c += 1
slist.Insert(common.MODE_Bluetooth_JAVA, '/home/abbas/test/'+f,'flower'+str(c) , dt1, dt2)
这是我的table:
但是当我想比较starttime
与datetime.now()python给予我错误:TypeError: can't compare datetime.datetime to unicode
2条答案
按热度按时间cpjpxq1n1#
“SQLite没有专门用于存储日期和/或时间的存储类。”参考:https://www.sqlite.org/datatype3.html
Python的sqlite3模块提供了“datetime模块中的date和datetime类型的默认适配器”。https://docs.python.org/2/library/sqlite3.html#default-adapters-and-converters
唯一的问题是必须确保正确地定义列。示例DDL:
任何后续的插入或选择数据的连接都必须传递
sqlite3.PARSE_DECLTYPES
作为关键字参数(aka kwarg)detect_types
的值。示例:nle07wnf2#
我也遇到过类似的问题,但是我的列类型是DATETIME而不是TIMESTAMP。要解决这个问题,我需要使用
detect_types = sqlite3.PARSE_DECLTYPES
和sqlite3.register_converter
方法。我的代码来解决这个问题是:
执行结果:
我使用
sqlite3.converters['TIMESTAMP']
是因为我想要相同的TIMESTAMP类型的转换器。