我在以下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
你明白为什么吗?
答案 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
看起来相同,但这种关系只是巧合。某些数据库适配器(如oursql
和sqlite3
)使用?
作为参数标记而不是%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()