将列表值插入 MySQL 查询的 %s 时出现“mysql.connector.errors.ProgrammingError:并非所有参数都在 SQL 语句中使用”

2024-03-23

我一直对这段代码有疑问。我正在尝试制作一个带有 2 个输入框、一个手机框和一个密码框的登录页面(手机是 MySQL 表中的主键)。

import tkinter as tk 
import re

import mysql.connector as ms 
mycon = ms.connect (host = 'localhost', user='root', password='Welcome@123', database='cs_project')
cursor = mycon.cursor()

root = tk.Tk()
root.geometry('2560x1600')
root.title("Hotel")
label = tk.Label(root, text='Welcome!', font=('Baskerville', 60), fg='Purple')
label.pack(padx=20, pady=20)

def Login():
    
    global LI_Mobile
    global LI_Password
    
    def validate_numbers(action, value_if_allowed):
        pattern = r'[0-9]*$'
        return re.match(pattern, value_if_allowed) is not None

    validate_numbers_cmd = root.register(validate_numbers)

    LI_Mobile_Label = tk.Label(root, text='Mobile:', font=('Baskerville', 25))
    LI_Mobile_Label.pack(padx=5, pady=5)
    LI_Mobile = tk.Entry(root, font=('Big Caslon', 20), validate='key', validatecommand=(validate_numbers_cmd, '%d', '%P'))
    LI_Mobile.pack(padx=5, pady=5)

    LI_Password_Label = tk.Label(root, text='Password:', font=('Baskerville', 25))
    LI_Password_Label.pack(padx=5, pady=5)
    LI_Password = tk.Entry(root, font=('Big Caslon', 20))
    LI_Password.pack(padx=5, pady=5)

    AccountDoesntExist_Label = tk.Label(root, text='You do not have an account, please create one by signing up.', font=('Baskerville', 25))
    AccountExists_Label = tk.Label(root, text='Welcome, please click the button below to be redirected to the Main Menu.', font=('Baskerville', 25))
    WrongPassword_Label = tk.Label(root, text='Incorrect Password, please try again.', font=('Baskerville', 25))
    
    def Submit2():
        mobile2=LI_Mobile.get()
        password2=LI_Password.get()
        mobile3 = list(mobile2)
        password3 = list(password2)
        
        MobileExist = cursor.execute('SELECT * FROM Accounts WHERE mobile="%s")',(mobile3));
        PasswordCorrect = cursor.execute('SELECT * FROM Accounts WHERE password="%s")',(password3));
        
        if MobileExist is None and PasswordCorrect is None:
            AccountDoesntExist_Label.pack(padx=5,pady=10)
       
        elif MobileExist is None and PasswordCorrect is not None:
            AccountDoesntExist_Label.pack(padx=5, pady=10)
       
        elif PasswordCorrect is None and MobileExist is not None:
            WrongPassword_Label.pack(padx=5, pady=10)
            
        else:
            AccountExists_Label.pack(padx=5, pady=5)
            MenuButton.pack(padx=5,pady=10)
            
            
    Submit2_Button = tk.Button(root, text='Submit', font=('Baskerville', 25), command=Submit2)
    Submit2_Button.pack (padx=5, pady=5)
    
LoginButton = tk.Button(root, text= "Log in", font=('Baskerville', 30), command=Login)
LoginButton.pack(padx=10, pady=10)

MenuButton = tk.Button(root, text= "Menu", font=('Baskerville', 30))

root.mainloop()

起初,mobile2 是一个整数值,password2 是字符串,但随后我收到了此错误:

“mysql.connector.errors.ProgrammingError:无法处理参数:int(1234567890),它必须是列表、元组或字典类型”

(我在Mobile的输入框中输入了值1234567890)

所以我强行将我的值更改为列表并再次尝试该程序,但我收到了一个新错误:-

mysql.connector.errors.ProgrammingError:SQL语句中未使用所有参数

我这部分程序的主要目标是接收用户输入,检查给定的值是否与 MySQL 表“Accounts”中的值匹配,然后通过菜单按钮(其命令我稍后会定义)。

我认为需要改变的主要内容是以下几行:

MobileExist = cursor.execute('SELECT * FROM Accounts WHERE mobile="%s")',(mobile3));
PasswordCorrect = cursor.execute('SELECT * FROM Accounts WHERE password="%s")',(password3));

两个问题:

  • 不要将参数占位符放在 SQL 表达式的引号内。
  • 单个值的元组需要尾随逗号,否则它只是一个带有括号的标量值。

像这样编写代码:

MobileExist = cursor.execute('SELECT * FROM Accounts WHERE mobile=%s)',(mobile3,));
PasswordCorrect = cursor.execute('SELECT * FROM Accounts WHERE password=%s)',(password3,));

或者,您可以传递列表而不是元组。我喜欢这种风格,因为当元组只有一个成员时,我不必记住添加尾随逗号。

MobileExist = cursor.execute('SELECT * FROM Accounts WHERE mobile=%s)',[mobile3]);
PasswordCorrect = cursor.execute('SELECT * FROM Accounts WHERE password=%s)',[password3]);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将列表值插入 MySQL 查询的 %s 时出现“mysql.connector.errors.ProgrammingError:并非所有参数都在 SQL 语句中使用” 的相关文章

随机推荐

  • 具有自定义比较器的 Java PriorityQueue

    我正在使用 PriorityQueue 和我自己的比较器 但不知何故 最终结果并不总是好的 我应该按平均成绩 姓名 身份证号码排序 最后它应该返回有序队列中剩余的名称 其余的名称都可以 但顺序不同 输入 姓名 平均成绩 id no add
  • 如何打印密码组合(但每个索引都有自定义约束)

    我正在尝试构建一个动态密码恢复工具 您可以指定密码以及与未知密码索引对应的未知字符列表 因此 如果您记住了 90 的密码 并且记不住几个字母 这将为您提供轻量级的暴力破解 我能够将用户提供的密码与未知字符列表结合起来 但是 我一直试图打印每
  • 禁用 mp3 自动播放

    我尝试禁用自动播放但没有成功 这是我的代码 失败的尝试 去除autoplay完全地 改变autoplay to autostart and AutoStart setting autoplay autostart AutoStart to
  • Reactable R - 将每页最大行数从 10 更改为 5

    我想将每页可反应的行数限制为 10 到 5 这是一个可重现的示例 set seed 250 df lt tibble x sample x 1 20 reactable df 现在 当您运行此代码时 会出现两页 每页 10 行 我想要四页
  • 正则表达式将 npm 库排除在缩小范围之外

    我必须为 websockets 使用非开源发布 订阅库 扩散 https www npmjs com package diffusion v 5 9 2 并且必须坚持使用特定版本 因为它是在服务器端使用的 我无法控制它 问题在于 在其代码库
  • 无法在 asp.net 中的 webmethod 中获取会话

    我只是发现问题与webmethod无关 这是由另一个问题引起的 我设置了Session PhotoId 在正常的 aspx 中 但我无法检索其中的值webMethodaspx 页面的 WebMethod EnableSession true
  • Windows C# 实现linux dd 命令

    我正在编写一个在 Windows 上运行的 C Net 应用程序 它需要拍摄可移动磁盘的映像并将其放入 Linux Live USB 上 Live USB 被插入目标机器并启动 启动时它会运行一个脚本 该脚本使用 dd 命令 如下所示将其闪
  • 如何从Python数据框中的列列表中删除重复项?

    我有一个数据框 id rev names 34e A su ra ve ra de ra 45e R ra su su ve de 55e G su ra de 41e M su de mu er su 现在我需要删除重复项 输出应如下所示
  • 更改 intellij 窗格的背景颜色

    我更改了 intellij 中的配色方案 以便 Java 编辑器窗格的背景为深色 文本为浅色 我不确定这是否直接相关 但是 在其他窗口 例如 运行 窗口 中 背景保持白色 但任何系统消息都显示为白色文本 这显然是一个问题 因为我无法阅读白色
  • JSF 在“ui:include src="#{bean.pagePath}”中动态包含 src

    我尝试在不同的选项卡中使用 ui include 标签包含多个源页面路径 问题是 当我将源页面路径指定为静态时 意味着将显示该页面 但如果从支持 bean 指定源页面路径 则意味着它将不包含该页面 这是我的代码 template xhtml
  • Z3 求解器中 MAxSMT 和用户定义成本函数的组合

    我正在使用 Z3 来优化带有一些软约束 带有加权 MaxSMT 的成本函数 我很好奇 MaxSMT 和用户定义的成本函数如何交互 求解器是否最小化 MaxSMT 成本和目标函数两者 是否有优先级机制 我找不到这方面的任何文档 如果我遗漏了什
  • NSUserDefaults 中可以存储的对象的最大大小

    谁能告诉我 NSUserDefaults 的最大大小 意味着我们可以存储在用户默认值中的对象或基元 例如 10 MB 等 Thanks 不 除了设备本身的存储容量之外 NSUserDefaults 没有大小限制 see
  • 编写django应用程序时的缩进标准

    我使用 notepad 作为编辑器 我发现使用选项卡时更容易跟踪代码中的关系 1 在 django 代码中缩进 制表符或空格 的标准是什么 2 除了notepad 之外 您还推荐其他代码编辑器吗 一定要遵循 PEP8 请加空格 并遵循 dj
  • 无法在 Safari 上运行测试 - 我们需要开发证书吗

    我正在尝试在 Safari 上运行量角器测试 在研究过程中 我了解到使用 Protractor 时无需下载任何特定于 Safari 的任何内容 因为驱动程序已附带 当尝试运行我的测试时 我收到 No Safari driver found
  • PHP 5.3.8 上的 Mime 类型检测失败并显示 fileinfo

    我在 CentOS 服务器上安装了 PHP 5 3 8 时 无法使用 fileinfo 检测简单 PNG 文件的 mime 类型 问题 基本上 如果我有以下代码 如您所见 该文件是 PNG 图像 文件的头字节已被检查并
  • 从 WebResponse 读取响应的最简单方法

    private void RespCallback IAsyncResult asynchronousResult try WebRequest myWebRequest1 WebRequest asynchronousResult Asy
  • Hibernate:未配置 CurrentSessionContext

    我不断收到 Hibernate异常 否 CurrentSessionContext已配置 在我的代码中 其他搜索返回的唯一信息是罪魁祸首是
  • 以编程方式在 iOS 中设置全屏模式

    如何以编程方式将 iPad 的 iOS 应用程序设置为全屏 你说的是可见的状态栏吗 在应用程序的 info plist 中 您可以添加一个新条目 UIStatusBarHidden 并确保其已选中 这将确保状态栏被隐藏 您还必须确保您的视图
  • 如何在 SOLR 中索引 .html 文件

    我想要索引的文件存储在服务器上 我不需要抓取 路径 到 文件 示例 HTML 文件是
  • 将列表值插入 MySQL 查询的 %s 时出现“mysql.connector.errors.ProgrammingError:并非所有参数都在 SQL 语句中使用”

    我一直对这段代码有疑问 我正在尝试制作一个带有 2 个输入框 一个手机框和一个密码框的登录页面 手机是 MySQL 表中的主键 import tkinter as tk import re import mysql connector as