tout d'abord, comme indiqué ici :Vérifier le nom de colonne SQL valide
Il vient de la doc PostGre, mais comme PostGre est très proche de la syntaxe SQL "idéale", il pourrait en être de même pour mysql... Donc pas de parenthèses dans les noms de colonnes, pas d'espaces...
Et deuxièmement, Les noms de colonne ne sont pas des chaînes :
La syntaxe suivante est valide :
CREATE TABLE (test VARCHAR(100) NOT NULL, ...)
Et le suivant est invalide et renverra une erreur de syntaxe :
CREATE TABLE ('test' VARCHAR(100) NOT NULL, ...)
Lorsque vous utilisez le modificateur '%s', il analyse les données en tant que STRING. donc il l'entoure de guillemets, ce qui n'est pas valide...
Donc, pour créer votre table, je suggère une "boucle for" qui valide les données (avec regexpr), et l'ajoute simplement à la chaîne :
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 += ");"
Et ensuite vous pouvez créer votre tableau :)