我创建了一个登录窗口,有一个包含姓名,用户名,密码的表"peerlist"。我想从表中验证用户名和密码。
username1包含我从登录窗口获得的用户名。我试图使用username1检索密码。
cursor.execute( "SELECT password FROM peerlist WHERE username=?",username1)
但是有一个错误
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current
statement uses 1, and there are 3 supplied.
使用元组作为参数:
cursor.execute( "SELECT password FROM peerlist WHERE username=?", (username1,))
形参应该是元组或列表(序列);但是字符串也是一个序列(它有一个长度,你可以处理单个字符),所以你给.execute()
调用一个len(username1)
字符序列,而不是一个参数。显然,用户名是3个字符长,因此出现错误消息。
这是个坏主意,会引起sql注入。详见http://docs.python.org/2/library/sqlite3.html
cursor.execute( "SELECT password FROM peerlist WHERE username=%s"%(username1))