并非在SQL语句错误中使用了所有参数

时间:2019-10-13 13:39:56

标签: python sql python-3.x

我想从一个数据库中获取名称,并以此启动一个新表。我想添加更多分析,但这是我已经开始苦苦挣扎的起点,而且我不知道我在哪里犯了错误。

mydb = db_login()

# get team
team = pd.read_sql('SELECT * FROM team', con=mydb)
names = team.name.to_list()

这将输出类似['name1','name2'...]

mycursor = mydb.cursor()
mycursor.execute("DROP TABLE IF EXISTS team_analyse")
mycursor.execute("CREATE TABLE team_analyse (name VARCHAR(50))") #todo add all needed columns
sqlFormula = "INSERT INTO team_analyse (name) VALUES (%s)" #todo initial team commit
mycursor.executemany(sqlFormula, names)
mydb.commit()

最后我得到以下错误:

  

mysql.connector.errors.ProgrammingError:SQL语句中未使用所有参数

1 个答案:

答案 0 :(得分:2)

您应该在此处使用一个INSERT INTO ... SELECT

INSERT INTO team_analyse (name)
SELECT name
FROM team

您更新的Python脚本:

mycursor = mydb.cursor()
sql = """INSERT INTO team_analyse (name)
         SELECT name
         FROM team"""
mycursor.execute(sql)

您看到的错误消息是告诉您,您传递了一个列表作为绑定到该语句的参数,但并未使用所有参数。实际上,您尝试运行的单个insert语句只有一个参数。但是无论如何,都没有必要将team表中的结果集带入Python的内存中。相反,请使用我的建议,让MySQL承担繁重的工作。