簡體   English   中英

並非所有參數都在 SQL 語句中使用(Python、MySQL)

[英]Not all parameters were used in the SQL statement (Python, MySQL)

我在以下 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

你明白為什么嗎?

參數標記是%s而不是%d

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

請注意, mysql.connector使用的參數標記可能與 Python 字符串格式中使用的%s看起來相同,但這種關系只是巧合。 一些數據庫適配器,如oursqlsqlite3使用? 作為參數標記而不是%s

好的,這是我的解決方案:

%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()

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

=> 您正在使用多行語句,因此在此處使用三重單引號並使用 %s 將傳遞的值表示為字符串然后這將起作用,因為 %d 不被 mysql 支持傳遞值

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()

使用單引號

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.")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM