【问题标题】:Python ProgrammingError: Not all parameters were used in the SQL statementPython ProgrammingError: SQL 语句中未使用所有参数
【发布时间】:2020-09-01 07:49:51
【问题描述】:

我正在使用 mysql(8.0.19) db 编写一个新的 python(版本 3.8.2)项目。
这是建表代码:

import mysql.connector

mydb = mysql.connector.connect(
    host = "localhost",
    user = "root",
    password = "mypassword",
    database = "acme_db"
)

mycursor = mydb.cursor()

sql_formula = ("CREATE TABLE employee (employee_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,"
                                        "first_name VARCHAR(255),"
                                        "last_name VARCHAR(255),"
                                        "email VARCHAR(255),"
                                        "phone_nr VARCHAR(255),"
                                        "hire_date DATE,"
                                        "job_id INTEGER,"
                                        "salary NUMERIC(8,2),"
                                        "commission_pct NUMERIC(8,2),"
                                        "manager_id INTEGER,"
                                        "department_id INTEGER)")
mycursor.execute(sql_formula)

mycursor.execute("CREATE TABLE jobs (job_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, job VARCHAR(255))")

mycursor.execute("CREATE TABLE managers (manager_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, employee_id INTEGER)")

mycursor.execute("CREATE TABLE departments (department_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, department_name VARCHAR(255))")

当我尝试插入数据时:

import mysql.connector
from datetime import datetime

mydb = mysql.connector.connect(
    host = "localhost",
    user = "root",
    password = "mypassword",
    database = "acme_db"
)

mycursor = mydb.cursor()

dptFormula = "INSERT INTO depatments (department_name) VALUES (%s)"
acme_departments = [("Accounting"),("R&D"),("Support")]
mycursor.executemany(dptFormula, acme_departments)

jobFormula = "INSERT INTO jobs (job) VALUES (%s)"
acme_jobs = [("Accountant"),("Developer"),("Team Leader"),("Support Specialist")]
mycursor.executemany(jobFormula, acme_jobs)

mngFormula = "INSERT INTO managers (employee_id) VALUES (%s)"
acme_managers = [(100),(101),(102)]
mycursor.executemany(mngFormula, acme_managers)
mydb.commit()

我明白了:

Traceback (most recent call last):
  File "c:/Users/Daniel/EmployeeProject/employee_mgt/insert_into.py", line 15, in <module>
    mycursor.executemany(dptFormula, acme_departments)
  File "C:\Program Files\Python38\lib\site-packages\mysql\connector\cursor.py", line 668, in executemany
    stmt = self._batch_insert(operation, seq_params)
  File "C:\Program Files\Python38\lib\site-packages\mysql\connector\cursor.py", line 613, in _batch_insert
    raise errors.ProgrammingError(
mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement

我为所有表定义了一个自动递增的主键,所以我在每个表中只插入一个带有“%s”的参数。我不知道为什么它不起作用,我期待第三个具有整数的插入会出现问题,我不确定是否应该插入 100 或“100”而不是第一个插入的字符串。

【问题讨论】:

  • 我认为你需要这样做dptFormula = "INSERT INTO depatments (department_name) VALUES (%s, %s, %s)"
  • 为什么?我正在尝试将 3 行添加到只有一列(在 pk 旁边)的表中
  • 哦,我看到了,我以为是三列。我想你想要的是尽可能快地插入所有行?那么也许this 可以提供帮助。
  • 插入部门应该插入部门。缺少插入管理器
  • @Denis Tsoi 你是对的,我纠正了错字,但它仍然不起作用。同样的错误。你是什​​么意思插入管理器丢失?,是最后一个插入。缺少插入员工,因为我想在填充其他 3 个表后最后填充该表

标签: python mysql


【解决方案1】:

解决方案是我不记得我需要为值传递一个元组列表,所以我添加了一个像这样的逗号:

dptFormula = "INSERT INTO departments (department_name) VALUES (%s)"
acme_departments = [("Accounting",),("R&D",),("Support",)]
mycursor.executemany(dptFormula, acme_departments)

在我传递的每个值之后。 现在可以了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    相关资源
    最近更新 更多