![](/img/trans.png)
[英]MySQL & Python: Not all parameters were used in the SQL statement
[英]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
看起來相同,但這種關系只是巧合。 一些數據庫適配器,如oursql
和sqlite3
使用?
作為參數標記而不是%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.