2012-09-27 3 views
2

이 질문에 답을 얻었지만 전에 대답 한 적이 있지만 바보이거나 나에게 답을주지 못합니다. 어쩌면 나는 그것을 이해하지 못할 수도 있습니다. 그러나 여기에 문제가 있습니다. 나는이 클래스를 가지고 :제공된 바인딩 수에 대한 Python sqlite3 오류

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

이름은 iterable이기 때문에 포장을 풀려고합니다. 수정하려면 그냥 자체로 튜플에 넣으십시오.

+0

작동하지만 새로운 문제가 발생했습니다. 새 사용자를 데이터베이스에 삽입 할 때마다 다른 사용자가 삭제되며, 원인은 무엇입니까? 나는 그것이 나의 테이블 창조의 원인이라고 생각하지만 어떻게 그 테이블을 만들어야 하는가? –

+0

"CREATE TABLE 사용자가 존재하지 않는다면 (이름은 TEXT PRIMARY KEY, 나이 INTEGER)" –

+0

Ahh, easy as that ... 감사합니다 :) –