在sqlite中插入int时,参数不受支持

时间:2012-08-07 19:58:42

标签: python datetime sqlite

我一直四处寻找在SQLite3中存储日期和时间,目的是在稍后使用比较来检索记录,例如SELECT * WHERE date1 < date2

我最终放弃了尝试存储datetime.datetime对象并决定使用UNIX时间戳,因为它们只是一个int并且易于操作但我仍然遇到错误。

import sqlite3 as lite
import datetime
import time

conn = lite.connect('dispatcher.db')
cur = conn.cursor()
query = "create table if not exists new_test (curent_dt)"
cur.execute(query)
conn.commit()
now = datetime.datetime.now() - datetime.timedelta(minutes=60)
temp = int(time.mktime(now.timetuple()))
cur.execute('insert into new_test (curent_dt) values (? )', (temp))
conn.commit()
conn.close()

返回以下错误:

  

cur.execute('insert into new_test(curent_dt)values(?)',(temp))       ValueError:参数属于不受支持的类型

在进一步调查问题之后,我发现你必须使用尾随逗号来创建单个元素元组,例如: (temp,)

3 个答案:

答案 0 :(得分:72)

请注意下面“temp”之后添加的逗号:

cur.execute('insert into new_test (curent_dt) values (?)', (temp,))

发生这种情况的原因是(temp)是整数,但(temp,)是长度为1的元组,包含temp

答案 1 :(得分:4)

cur.execute('insert into new_test (curent_dt) values (? )', (temp))

替换此代码
cur.execute('insert into new_test (curent_dt) values (? )', (temp,))

在Python中,(temp)和(temp,)是两回事。 (temp)只是一个普通变量,如整数,但(temp,)是一个元组。只有在每个元素后面提供逗号才会使用元组,而execute()方法只在第二个参数中使用元组。

答案 2 :(得分:-3)

使用此

更改该行
cur.execute('insert into new_test (curent_dt) values (?)',str(temp))