【问题标题】:Assemble SQLite queries with Python variables [duplicate]使用 Python 变量组装 SQLite 查询 [重复]
【发布时间】:2016-11-25 21:32:55
【问题描述】:

我正在尝试在 SQLite 查询中放置一个变量,我已经阅读了文档,我在这里阅读了类似的问题和 Internet 上的文章,但是当我遇到此代码时,我不断收到相同的两个错误:

import sqlite3
import sys
import time

user_id = (int(time.time()))

db_conn = sqlite3.connect('data.db')
db_curs = db_conn.cursor()

db_curs.execute('insert into Users values(?, "John Doe", "johndoe@yahoo.com", "52g5f2gf5gfg2f45f4f")', user_id)
db_curs.execute('select * from Users')
for registry in db_curs.fetchall():
    print(registry)

db_conn.commit()

db_curs.close()
db_conn.close()

我在尝试插入数据的行中出现以下错误:

ValueError: 参数的类型不受支持

如果我将 user_id 的值转换为字符串,如下所示:

user_id = (str(int(time.time())))

我收到以下错误:

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 10 个。

请注意,自 EPOCH 以来的时间长度为 10 个数字,所以我认为显然存在问题,但我不知道它是什么。

【问题讨论】:

  • execute 期望占位符的参数序列作为第二个参数,但您传递的是单个值。将其转换为字符串会产生一个序列,这也是错误的。将参数包装在元组或列表中。

标签: python sqlite


【解决方案1】:

execute 的第二个参数需要是一个元组:

db_curs.execute('insert into Users values(?, "John Doe", "johndoe@yahoo.com", "52g5f2gf5gfg2f45f4f")', (user_id,))

【讨论】:

  • 我发现我没有注意到文档中的某些内容,我只需要在元组中添加一个逗号,如下所示:user_id = (int(time.time() ),)
猜你喜欢
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
相关资源
最近更新 更多