在sqli中插入int时不支持参数

2024-05-14 16:54:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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: parameters are of unsupported type

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


Tags: testimportnewexecutedatetime错误时间dt
3条回答
用这个改变那条线

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

将此代码替换为

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

在Python中,(temp)和(temp,)是两个不同的东西。(temp)和integer一样只是一个普通变量,但(temp,)是一个元组。元组只能通过在每个元素后面提供逗号来获取,execute()方法只在其第二个参数中获取元组。

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

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

发生这种情况的原因是(temp)是一个整数,而(temp,)是一个包含temp的长度元组。

相关问题 更多 >

    热门问题