尝试使用Python循环将工作表中的值添加到MySQL表中。
代码如下:
for i in range(number_of_columns):
column_title=worksheet.cell(0,i).value
for n in range(1,number_of_rows+1):
value_for_table=worksheet.cell(n,i).value
print n,i,column_title, value_for_table
mycursor.execute("INSERT INTO Test (%s) VALUES (%s)", (column_title,value_for_table))
它吐出以下错误:
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Name') VALUES ('Germany')' at line 1
我尝试解决方法here失败
这些列最初是使用以下代码创建的:
for i in range(number_of_columns):
column_title=worksheet.cell(0,i).value
datatype_of_column=type(worksheet.cell(1,i).value)
if datatype_of_column==float:
cell_type="FLOAT(10)"
elif datatype_of_column==int:
cell_type="INT(10)"
elif datatype_of_column==unicode or datatype_of_column==str:
cell_type="VARCHAR(10)"
elif datatype_of_column==bool:
cell_type="BINARY"
else:
print ('Datatype at column %s not recognized. Set to float.', i)
mycursor.execute("ALTER TABLE Test ADD (%s %s)" % (column_title, cell_type))
答案 0 :(得分:1)
您不能在准备好的语句中使用占位符表示列名或表名。您应该将查询执行(mycursor.execute)更改为:
query=("INSERT INTO Test (%s)" % column_title) + " VALUES (%s)"
mycursor.execute(query, (value_for_table,))
编辑
我已为您的要求修改了脚本。如您所说,脚本将为每个值创建一个新行,而不是为每一行生成一个插入语句。试试这个:
for n in range(1,number_of_rows+1):
value_for_table=worksheet.cell(n,i).value
query="INSERT INTO Test ("
query_values="("
values=[]
for i in range(number_of_columns):
column_title=worksheet.cell(0,i).value
value_for_table = worksheet.cell(n, i).value
query=query+column_title if i==0 else query+','+column_title
query_values=query_values+"%s" if i==0 else query_values+',%s'
values.append(value_for_table)
query=query+') VALUES '+query_values+')'
mycursor.execute(query, values)