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

Tim*_*ald 47 python sqlite datetime

我一直四处寻找在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()
Run Code Online (Sandbox Code Playgroud)

返回以下错误:

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

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

Ale*_*int 77

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

cur.execute('insert into new_test (curent_dt) values (?)', (temp,))
Run Code Online (Sandbox Code Playgroud)

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

  • **参数是不受支持的类型**的意思是你将一个整数传递给sql查询的例子(根本就是一个字符串),如user2605884所说,做的事情与你尝试连接int和str时的做法相同.参数的逗号遗漏只是无声地失败.确实如果参数中的逗号(,)不起作用,但它确实不是答案.请任何人仔细检查,因为我认为这个答案是错误的,而且只需通过阅读而不是测试来投票. (2认同)
  • @erm3nda 我刚刚遇到了同样的问题,而那个愚蠢的额外逗号为我解决了这个问题 (2认同)

小智 6

cur.execute('insert into new_test (curent_dt) values (? )', (temp))
Run Code Online (Sandbox Code Playgroud)

将此代码替换为

cur.execute('insert into new_test (curent_dt) values (? )', (temp,))
Run Code Online (Sandbox Code Playgroud)

在Python中,(temp)和(temp,)是两件事。(temp)只是一个普通变量,如整数,但(temp,)是一个元组。元组只能通过在每个元素之后提供逗号来获取,并且execute()方法仅在其第二个参数中采用元组。


小智 -5

用这个改变那条线

cur.execute('插入new_test(current_dt)值(?)',str(temp))