em primeiro lugar, como dito aqui:Verifique se há um nome de coluna SQL válido
Ele vem do documento PostGre, mas como o PostGre está muito próximo da sintaxe SQL "ideal", pode ser o mesmo para o mysql ... Portanto, sem parênteses nos nomes das colunas, sem espaços ...
E em segundo lugar, Os nomes das colunas não são strings :
A seguinte sintaxe é válida:
CREATE TABLE (test VARCHAR(100) NOT NULL, ...)
E o seguinte é inválido e lançará um erro de sintaxe:
CREATE TABLE ('test' VARCHAR(100) NOT NULL, ...)
Quando você usa o modificador '%s', ele analisa os dados como STRING. então ele o cerca com aspas, o que é inválido ...
Então, para criar sua tabela, sugiro um "for loop" que valida os dados (com regexpr) e simplesmente adicione-o à string:
import re
# ...
query = "CREATE TABLE test (ID INT AUTO_INCREMENT,name VARCHAR(50)"
for c in columnames:
if (re.search(r"^[A-Za-z][A-Za-z0-9_]*$", c) query += c + ", FLOAT" #this regex validate string if it begins with alphabetic char (upper or lower case), and if the others characters are alphanumeric, or are underscores
else raise SyntaxError("Invalid Column name!!") #If not, we raise a syntax error
query += ");"
E então você pode criar sua tabela :)