( "SELECT password FROM peerlist WHERE username=?" ,用户名 1)



我创建了一个登录窗口,有一个包含姓名,用户名,密码的表"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))

相关内容

最新更新