【问题标题】:Error binding parameter 0: probably unsupported type错误绑定参数 0:可能不支持的类型
【发布时间】:2014-03-25 18:12:04
【问题描述】:

我似乎无法弄清楚我的代码有什么问题,但我不断收到:

error "binding parameter 0 - probably unsupported type". 

这是我的代码:

last = 'EBERT'

sakila = connect("sakila.db")
res = sakila.execute("SELECT first_name, last_name FROM customer WHERE last_name = ?",[(last,)])

for row in res:
    print(row)

当我在查询中找到'EBERT'并且没有设置为变量时,它工作正常,所以我知道这是元组语法或其他东西的问题。我试过不带括号,第二个变量first_name,有和没有单独定义的游标,基本上我能想到的每一种方法,我研究了几个小时但一无所获,所以任何帮助将不胜感激。

【问题讨论】:

  • 顺便说一句,我的代码中的行和缩进都很好,只是在帖子中搞砸了。
  • 我也无法让 fetchall 工作。我有 res.fetchall() 但它只给了我一个空列表,我不知道为什么

标签: python python-3.x sqlite


【解决方案1】:

嵌套列表,元组用于executemany,而不用于execute

传递一个包含参数的平面列表(或元组)。

res = sakila.execute(
    "SELECT first_name, last_name FROM customer WHERE last_name = ?",
    (last,))

res = sakila.execute(
    "SELECT first_name, last_name FROM customer WHERE last_name = ?",
    [last])

【讨论】:

  • 谢谢!效果很好。您知道如何使用 fetchall() 以使 res.fetchall() 不会创建空列表吗?
  • @user3345626,您在迭代res 后是否调用了fetchall?一旦它被迭代,它就被耗尽了。您需要再次执行查询。只需删除 for 循环即可解决您的问题。
【解决方案2】:

我遇到了同样的错误,我的数据类型不匹配。然后我将其转换为字符串;

cursor.execute('''INSERT INTO employees VALUES (?);''', (str(data[0]), ))

而且效果很好。希望这对某人有帮助。

【讨论】:

    【解决方案3】:

    我在运行这段代码时遇到了同样的错误,

        cur.execute('SELECT id FROM User WHERE name = ?', (username, ))
        user_id = cur.fetchone()
    
        cur.execute('INSERT OR IGNORE INTO Course(title) VALUES (?)', (course, ))
        cur.execute('SELECT id FROM Course WHERE title = ?', (course, ))
        course_id = cur.fetchone()
    
        print(user_id, course_id, role)
        cur.execute('''INSERT OR REPLACE INTO Member(user_id, course_id, role) 
        VALUES (?, ?, ?)''', (user_id, course_id, role))
    

    问题在于 cur.fetchone() 返回一个包含一个元素而不是整数值的列表。所以你需要添加方括号来访问元素。

     cur.execute('INSERT OR IGNORE INTO User(name) VALUES (?)', (username, ))
        cur.execute('SELECT id FROM User WHERE name = ?', (username, ))
        user_id = cur.fetchone()[0]
    
        cur.execute('INSERT OR IGNORE INTO Course(title) VALUES (?)', (course, ))
        cur.execute('SELECT id FROM Course WHERE title = ?', (course, ))
        course_id = cur.fetchone()[0]
    
        print(user_id, course_id, role)
        cur.execute('''INSERT OR REPLACE INTO Member(user_id, course_id, role) 
        VALUES (?, ?, ?)''', (user_id, course_id, role))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多