en primer lugar, como se dice aquí:Comprobar el nombre de columna SQL válido
Viene de PostGre doc, pero debido a que PostGre está muy cerca de la sintaxis SQL "ideal", podría ser lo mismo para mysql... Así que no hay paréntesis en los nombres de las columnas, no hay espacios...
Y en segundo lugar, los nombres de las columnas no son cadenas :
La siguiente sintaxis es válida:
CREATE TABLE (test VARCHAR(100) NOT NULL, ...)
Y el siguiente no es válido y generará un error de sintaxis:
CREATE TABLE ('test' VARCHAR(100) NOT NULL, ...)
Cuando usa el modificador '%s', analiza los datos como STRING. entonces lo rodea con comillas, lo cual no es válido...
Entonces, para crear su tabla, sugiero un "bucle for" que valide los datos (con regexpr) y simplemente agréguelo a la cadena:
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 += ");"
Y luego puedes crear tu tabla :)