2

私はこれが以前に尋ねられ、答えられたことがあると確信しています、しかし私は愚かであるか、それから答えのどれも私のために働きません。多分私はそれを理解していません。ただし、ここに問題があります。私はこのクラスを取得しました:

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.
>>> 
4

1 に答える 1

4

名前は反復可能であるため、解凍しようとします...修正するためにそれ自体をタプルに入れます

cur.execute("SELECT * FROM users WHERE name=?", (name,))
于 2012-09-27T17:15:20.650 に答える