För det första, som sagt här :Kontrollera efter giltigt SQL-kolumnnamn
Det kommer från PostGre doc, men eftersom PostGre är väldigt nära den "ideala" SQL-syntaxen, kan det vara samma sak för mysql... Så ingen parentes i kolumnnamn, inga mellanslag...
Och för det andra, Kolumnnamn är inte strängar :
Följande syntax är giltig:
CREATE TABLE (test VARCHAR(100) NOT NULL, ...)
Och följande är ogiltig och kommer att ge ett syntaxfel:
CREATE TABLE ('test' VARCHAR(100) NOT NULL, ...)
När du använder modifieraren '%s' analyserar den data som STRING. så den omger den med citattecken, vilket är ogiltigt...
Så för att skapa din tabell föreslår jag en "for loop" som validerar data (med regexpr), och helt enkelt lägger till den i strängen:
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 += ");"
Och sedan kan du skapa ditt bord :)