【发布时间】: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 个表后最后填充该表