in primo luogo, come detto qui:Verifica il nome della colonna SQL valido
Viene da PostGre doc, ma poiché PostGre è molto vicino alla sintassi SQL "ideale", potrebbe essere lo stesso per mysql... Quindi nessuna parentesi nei nomi delle colonne, niente spazi...
E in secondo luogo, I nomi delle colonne non sono stringhe :
È valida la seguente sintassi:
CREATE TABLE (test VARCHAR(100) NOT NULL, ...)
E il seguente non è valido e genererà un errore di sintassi:
CREATE TABLE ('test' VARCHAR(100) NOT NULL, ...)
Quando usi il modificatore '%s', analizza i dati come STRING. quindi lo circonda con virgolette, il che non è valido...
Quindi, per creare la tua tabella, suggerisco un "ciclo for" che convalida i dati (con regexpr) e semplicemente lo aggiunga alla stringa:
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 poi puoi creare la tua tabella :)