【问题标题】:sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 20 suppliedsqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 20 个
【发布时间】:2020-05-11 12:27:42
【问题描述】:

我目前在使用 sqlite3 时遇到此问题。我想从“用户”表中选择“密码”,条件是用户输入的电子邮件在“用户”表中。我有查询c.execute('SELECT Password FROM Users WHERE Email = (?)',(str(email))),这是发生错误sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 20 supplied. 的地方。

Users 表包含 Password 和 Email 列。

这里是这个查询所在的函数:

from tkinter import *
from tkinter import messagebox as ms
from tkinter import ttk
import sqlite3
from PIL import Image,ImageTk
import datetime
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib

global time 
time = datetime.datetime.now()


# make database and users (if not exists already) table at programme start up
with sqlite3.connect('Gym.db') as db:
    c = db.cursor()

c.execute('CREATE TABLE IF NOT EXISTS Users (UserID INTEGER PRIMARY KEY,FirstName TEXT ,LastName TEXT ,Gender TEXT,Email TEXT NOT NULL,Phone TEXT NOT NULL,Username TEXT NOT NULL,Password TEXT NOT NULL);')
c.execute('CREATE TABLE IF NOT EXISTS Staff (StaffID INTEGER PRIMARY KEY, Role TEXT NOT NULL, Name TEXT);')
c.execute('CREATE TABLE IF NOT EXISTS Gym (GymID INTEGER PRIMARY KEY, Location TEXT);')
c.execute('CREATE TABLE IF NOT EXISTS Class (ClassID INTEGER PRIMARY KEY, ClassType TEXT, Location TEXT, UserID INTEGER, Staff TEXT, StaffID INTEGER, Time TEXT, FOREIGN KEY (UserID) REFERENCES Users(UserID), FOREIGN KEY (StaffID) REFERENCES Staff (StaffID));')
db.commit()
db.close()

class main:
    def __init__(self,master):


        self.master = master

        self.verify_email = StringVar()
        self.n_verify_email = StringVar()

    def forgot_password_email(self):

            email = self.n_verify_email.get()

            with sqlite3.connect('Gym.db') as db:
                c = db.cursor()

            c.execute('SELECT Email FROM Users')

            result = c.fetchall()
            for row in result:
                r = row[0]

            c.execute('SELECT Password FROM Users WHERE Email = (?)',(str(email)))

            result2 = c.fetchall()
            for row in result2:
                r2 = row[0]

            db.commit()
            db.close()

root = Tk()
root.title("Gym Membership System")
root.iconbitmap(r'Gymicon.ico')
main(root)
root.mainloop()

【问题讨论】:

  • 您发布的代码似乎超出了您的问题的合理范围。请阅读How to Ask 以及如何制作minimal reproducible example;提供 MRE 可帮助用户回答您的问题,并帮助未来的用户与您的问题相关。
  • 应该是(str(email),),因为它需要一个元组。

标签: python sql sqlite tkinter


【解决方案1】:

你需要让你 (str(email)) 创建一个元组,因为在解析查询时它应该是一个元组。所以只要让它像这样 (str(email), ) 它应该可以正常工作

【讨论】:

    猜你喜欢
    • 2013-05-27
    • 2020-10-15
    • 2016-01-21
    相关资源
    最近更新 更多