python - 准备好的语句和不正确的参数数量

标签 python mysql

我正在使用 SQL 查询查找具有特定 RFID 值的所有用户,每个用户可以有多个 RFID 值。

我已经创建了一个准备好的语句,这并不是真正需要的,因为插入的值应该只是数字,但是,我不断收到错误消息说 Incorrect number of arguments executing prepared statement 即使我只输入一个存储在元组中的值。

变量RFID是函数内的一个参数

conn = Database.connect()  # returns an instance of connector.connect 

cursor = conn.cursor(prepared=True)  # Creates a cursor that is expecting 

sql_query = """SELECT RFID, users.UserID, FirstName, Surname, Email, Dob, Gender, Mobile 
               FROM users 
               JOIN RFIDs ON (users.UserID = RFIDs.UserID) 
               WHERE users.UserID = (SELECT UserID FROM RFIDs WHERE RFID = '%s');"""

cursor.execute(sql_query, (rfid,))  # Get user info


user_info_array = cursor.fetch()  # Store the results


conn.commit()  # Save the changes to the database

查询工作正常,因为我已经使用过它,并且在手动输入值时。

提前致谢

最佳答案

你不应该在 %s 周围使用单引号

sql_query = """SELECT RFID, users.UserID, FirstName, Surname, Email, Dob, Gender, Mobile 
           FROM users 
           JOIN RFIDs ON (users.UserID = RFIDs.UserID) 
           WHERE users.UserID = (SELECT UserID FROM RFIDs WHERE RFID = %s);"""

并且正如 spencer7593 所建议的那样,子查询应该使用 IN 子句而不是 =(等于运算符)这是为了避免子查询返回多于一行时的错误

 sql_query = """SELECT RFID, users.UserID, FirstName, Surname, Email, Dob, Gender, Mobile 
       FROM users 
       JOIN RFIDs ON (users.UserID = RFIDs.UserID) 
       WHERE users.UserID IN (SELECT UserID FROM RFIDs WHERE RFID = %s);"""

或内部连接

sql_query = """SELECT RFID, users.UserID, FirstName, Surname, Email, Dob, Gender, Mobile 
   FROM users 
   JOIN RFIDs ON (users.UserID = RFIDs.UserID) 
   inner join  (
     SELECT UserID FROM RFIDs WHERE RFID = %s
   ) t on T.UserID  = users.UserID ;""" 

关于python - 准备好的语句和不正确的参数数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56797462/

相关文章:

python - 为什么在具有相同硬件的不同计算机上读取sqlite数据库速度较慢?

python - 如何在一个房间里展示特定的元素?

mysql - mysql扩展名已弃用,以后将删除:使用mysqli或PDO代替

mysql - 最后一行接近尾部时出错

python - 如何编写 pandas 每次迭代后生成的新列

python - 使用 PyMC 的 MCMC 作为频率分析的有效采样器?

php - 迁移速度非常慢

MySQL - 独特的电子邮件,拥有最多货币的用户

MySQL导出命令

c# - 在多线程 C# 应用程序中嵌入 Python