【问题标题】:SQLite ValueError: parameters are of unsupported typeSQLite ValueError:参数的类型不受支持
【发布时间】:2021-02-10 16:32:10
【问题描述】:

我在我的程序中使用了这段代码:

def insert(self, table, params):
  keys = ', '.join(params.keys())
  values = params.values()

  query = f"INSERT INTO songs ({keys}) VALUES (?, ?);" 
  print(keys)
  print(query)
  print(values)

  self.cur.execute(query , values)
  self.conn.commit()

  return self.cur.lastrowid

打印出来的

name, filehash
INSERT INTO songs (name, filehash) VALUES (?, ?);
dict_values(['testaudio8.mp3', 
'BA614A989B7BCF44E38D00EEFFE96F2D8BD6677D'])

但返回错误:

self.cur.execute(query , values)
ValueError: parameters are of unsupported type

我想将 dict_values 中的值插入问号,但出现错误。有人可以帮忙吗?

【问题讨论】:

  • 如果包含整个代码更容易获得帮助。也许query = f"INSERT INTO songs ({keys}) VALUES (?, ?);", ( print(keys), print(query), print(values))
  • 您应该使用元组,而不是使用值列表并将它们传递给“self.cur.execute(query, values)”。
  • 我放 print 的唯一原因是让大家知道每个变量的值是什么。使用元组会导致 ValueError: parameters must be str。基本上我说的是忽略打印,我只想在问号所在的地方插入 dict_values。

标签: python sql sqlite


【解决方案1】:

你需要做的是

# skip a few connect code etc 
cur = con.cursor 

values = ("nameToInsert", "fileHash") # <-- Tuple 

cur.execute("INSERT INTO songs (name, filehash) VALUES (?, ?)", values)

如果你只有一个值,你需要像这样传递它:

value = ("onlyValue", ) # see the , 

否则将无法正常工作。

【讨论】:

    【解决方案2】:

    在元组中存储键、值

    def insert(self, table, params):
      keys = tuple((params.keys())
      values = tuple(params.values())
    
      query = f"INSERT INTO songs ({keys}) VALUES (?, ?);" 
      print(keys)
      print(query)
      print(values)
    
      self.cur.execute(query , values)
      self.conn.commit()
    
      return self.cur.lastrowid
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 2021-10-02
      • 2022-01-14
      • 1970-01-01
      相关资源
      最近更新 更多