我想从一个数据库中获取名称,并以此启动一个新表。我想添加更多分析,但这是我已经开始苦苦挣扎的起点,而且我不知道我在哪里犯了错误。
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语句中未使用所有参数
答案 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承担繁重的工作。