关于提供的绑定(bind)数量的 Python sqlite3 错误

标签 python database sqlite

我确信之前已经有人问过这个问题并回答过,但要么我很愚蠢,要么没有一个答案对我有用。也许我只是不明白。然而,问题就在这里;我得到了这门课:

import sqlite3

class User:
   def __init__(self, name, age):
        self.name = name
        self.age = age



   def saveToDatabase(self):
        connection = sqlite3.connect("users.db")
        cur = connection.cursor()

        cur.execute("DROP TABLE IF EXISTS users")
        cur.execute("CREATE TABLE users (name TEXT PRIMARY KEY, age INTEGER)")
        cur.execute("INSERT OR REPLACE INTO users VALUES (?,?)", (self.name, self.age))

        connection.commit()
        connection.close()

    @staticmethod
    def printUserFromDatabase(name):
        connection = sqlite3.connect("users.db")
        cur = connection.cursor()

        cur.execute("SELECT * FROM users WHERE name=?", name)
        print(cur.fetchone())

        connection.close()

它可以工作,创建数据库,我可以向其中添加用户,但是当我尝试从数据库打印用户时,会发生这种情况:

>>> tom = User("Tom", 24)
>>> tom.saveToDatabase()
>>> User.printUserFromDatabase("Tom")
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    User.printUserFromDatabase("Tom")
  File "C:\Users\Markus\Desktop\foo\foo.py", line 25, in printUserFromDatabase
    cur.execute("SELECT * FROM users WHERE name=?", name)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 3 supplied.
>>> 

最佳答案

由于 name 是可迭代的,它会尝试解压它...将其放入一个元组中,仅用其本身来修复

cur.execute("SELECT * FROM users WHERE name=?", (name,))

关于关于提供的绑定(bind)数量的 Python sqlite3 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12626706/

相关文章:

Python - 如何计算自 X 日期以来耗时?

sql - sql join语句中表的顺序有什么意义吗

Android sqlite3 说 "no _id"但表肯定有

macos - 有谁知道 Xamarin.Mac/Monomac 上 SQLite 的一个很好的例子吗?

sqlite - 如何在sqlite中逃脱?

python - 将 numpy 矩阵转换为一维 numpy 数组

python - 在图像上插入文本[2],python

python - 返回列表,其中元素依次从列表中获取/python

database - Laravel Framework 上的 removeColumn 和 dropColumn 方法有什么区别?

mysql - 错误代码 : 1215. 无法添加外键约束(外键)