将日期时间插入SQLite数据库

时间:2015-04-27 16:08:42

标签: sqlite datetime python-3.x

我正在尝试将时间插入我的数据库,但是当我打印我插入的内容时,它是不正确的。我在将时间变量插入数据库之前打印了它,它是“12:01:09.149059”。当我使用 strftime 时它工作正常,但我因为时间关闭而切换。

from datetime import datetime
time = str(datetime.now().time())
cur.execute("insert into apple values (?,?,?)",(price,time,date))
con.commit()

#prints:
>>>('132.75', "<method 'time' of 'datetime.datetime' objects>", 'Apr 27, 2015')

2 个答案:

答案 0 :(得分:2)

您正在尝试将Python方法对象转换为字符串,该字符串默认为其表示形式,您不需要。试试这个:

from datetime import datetime
time = datetime.now().strftime("%B %d, %Y %I:%M%p")
cur.execute("insert into apple values (?,?,?)",(price,time,date))
con.commit()

#prints:
>>>('132.75', "Apr 27, 2015 09:38AM", 'Apr 27, 2015')

答案 1 :(得分:0)

sqlite3模块已经为datetime.datetime个对象提供了适配器。您可以按原样传递datetime.datetimedatetime.date个对象:

>>> import sqlite3
>>> from datetime import datetime, timezone
>>> db = sqlite3.connect(':memory:')
>>> db.execute('select ?', (datetime.now(timezone.utc),)).fetchone()
('2015-04-27 20:22:26.951841+00:00',)

您可以define your own adapters if necessary例如传递datetime.time个对象:

>>> from datetime import time as datetime_time
>>> def adapt_time(t):
...     return str(t)
... 
>>> sqlite3.register_adapter(datetime_time, adapt_time)
>>> db = sqlite3.connect(':memory:')
>>> db.execute('select ?', (datetime.now(timezone.utc).time(),)).fetchone()
('20:24:00.867221',)

将日期和时间存储在一起(只需通过datetime对象而不进行任何转换)。使用UTC时间或感知日期时间对象。