并非所有参数都在SQL语句中使用(Python,MySQL)

时间:2013-12-28 18:56:37

标签: python mysql sql

我在以下Python代码中收到错误:

import mysql.connector
cnx = mysql.connector.connect(user='root', password='',
                          host='127.0.0.1',
                          database='DB')
cursor = cnx.cursor()

Name = "James"
Department = "Finance"
StartYear = 2001
CurrentPos = 2001
Link = ""

add_user = ("INSERT INTO DB.tbluser "
       "(username, department, startyear, currentpos, link) "
       "VALUES (%s, %s, %d, %d, %s)")
data_user = (Name, Department, StartYear, CurrentPos, Link)
cursor.execute(add_user, data_user)
cnx.commit()
cursor.close()
cnx.close()

错误消息是

mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement

你明白为什么吗?

5 个答案:

答案 0 :(得分:42)

参数标记为%s而非%d

add_user = """INSERT INTO DB.tbluser 
              (username, department, startyear, currentpos, link) 
              VALUES (%s, %s, %s, %s, %s)"""

请注意mysql.connector使用的parameter markers可能与Python字符串格式中使用的%s看起来相同,但这种关系只是巧合。某些数据库适配器(如oursqlsqlite3)使用?作为参数标记而不是%s

答案 1 :(得分:0)

使用单引号

sql = 'insert into Student (id, fname, lname, school) values(%s, %s, %s , %s)'
values = (4, "Gaddafi", "Adamu", "Informatic")

a.execute(sql, values)

mydb.commit()
print(a.rowcount, "record inserted.")

答案 2 :(得分:0)

add_user ='''(“ INSERT INTO DB.tbluser” “(用户名,部门,开始年,当前位置,链接)” “ VALUES(%s,%s,%s,%s,%s)”)'''

=>您正在使用多行语句,因此请在此处使用三重单引号 并使用%s将传递的值表示为字符串,那么它将起作用,因为mysql不支持%d传递值

答案 3 :(得分:0)

好的,这是我的解决方案:

%d 必须是 %s 的

''' 适用于多行,因此行首的 +" 和行尾的 "\ 但这不是这里的问题

我有时发现 cursor.execute(query, values) 或在你的情况下 cursor.execute(add_user, data_user) 有时有问题......所以我将值直接附加到查询中。

您首先将 data_user 移到 add_user 之上。然后在查询字符串的末尾添加 %values(在您的情况下为 %data_user)。这将允许您在 cursor.exec(add_user) 命令之前执行一个漂亮的小打印 (add_user) 以查找其他错误。


        import mysql.connector

        cnx = mysql.connector.connect(
              user='root', 
              password='',
              host='127.0.0.1',
              database='DB')

        cursor = cnx.cursor()

        Name = "James"
        Department = "Finance"
        StartYear = 2001
        CurrentPos = 2001
        Link = ""

        data_user = (Name, Department, StartYear, CurrentPos, Link)

        add_user = '''(INSERT INTO DB.tbluser 
        (username, department, startyear, currentpos, link) 
        VALUES (%s, %s, %s, %s, %s))'''%data_user


        cursor.execute(add_user)
        cnx.commit()
        cursor.close()
        cnx.close()

答案 4 :(得分:0)

import mysql.connector

def login(self,name,password):
    db = mysql.connector.connect(host="localhost",user="root",passwd="Cyber@123",database="mydata")
    if(db):
        print("connection successfull")
    else:
        print("faild")
    query = db.cursor()
    syntext = """insert into login(use_name,psd) values(%s,%s)"""
    value = (name,password)
    query.execute(syntext,value)
    db.commit()