首页 > 解决方案 > 将列表插入mysql时,SQL语句中并未使用所有参数

问题描述

    mycursor.execute("CREATE TABLE test_table3(lane smallint UNSIGNED NOT NULL, previousT int NOT NULL, averageT int NOT NULL, detectionT int NOT NULL, carID int PRIMARY KEY AUTO_INCREMENT)")

                mysql_lane1_output = [1, 28, 28, datetime.datetime(2020, 6, 7, 13, 24, 45, 297050)]
                print(mysql_lane1_output)
                lane_1_param = ','.join('?' * len(mysql_lane1_output))
                mysql1 = 'INSERT INTO test_table3 VALUES(%s);'% lane_1_param
                mycursor.execute(mysql1,mysql_lane1_output)
                mydb.commit()

我创建了一个表并希望将列表项插入其中并不断收到错误“并非所有参数都在 SQL 语句中使用”。我按照 Stackoverflow 上关于将列表插入 mysql 的代码的答案。

标签: mysqlsqlpython-3.x

解决方案


这在 python 3.8.2 中运行

import mysql.connector
import datetime

以下代码已更改

  • 现在创建表是 detectionT DATETIME
  • mysql_lane1_output 现在有 5 个元素
  • lane_1_param 更改为使用 %s 而不是 ?

代码

 mycursor.execute("CREATE TABLE IF NOT exists test_table3(lane smallint UNSIGNED NOT NULL, previousT int NOT NULL, averageT int NOT NULL, detectionT DATETIME NOT NULL, carID int PRIMARY KEY AUTO_INCREMENT)")
 mysql_lane1_output = [1, 28, 28, datetime.datetime(2020, 6, 7, 13, 24, 45, 297050),None]
 print(mysql_lane1_output)
 lane_1_param = ','.join(len(mysql_lane1_output)*('%s',))
 mysql1 = 'INSERT INTO test_table3 VALUES(%s);'% lane_1_param
 mycursor.execute(mysql1,mysql_lane1_output)
 mydb.commit()

推荐阅读