Erstens, wie hier gesagt:Auf gültigen SQL-Spaltennamen prüfen
Es stammt aus dem PostGre-Dokument, aber da PostGre der "idealen" SQL-Syntax sehr nahe kommt, könnte es für mysql dasselbe sein ... Also keine Klammern in Spaltennamen, keine Leerzeichen ...
Und zweitens sind Spaltennamen keine Zeichenfolgen :
Es gilt die folgende Syntax:
CREATE TABLE (test VARCHAR(100) NOT NULL, ...)
Und die folgende ist ungültig und löst einen Syntaxfehler aus:
CREATE TABLE ('test' VARCHAR(100) NOT NULL, ...)
Wenn Sie den Modifikator „%s“ verwenden, werden Daten als STRING geparst. daher wird es in Anführungszeichen gesetzt, was ungültig ist ...
Um Ihre Tabelle zu erstellen, schlage ich also eine "for-Schleife" vor, die Daten (mit Regexpr) validiert und sie einfach zur Zeichenfolge hinzufügt:
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 += ");"
Und dann können Sie Ihre Tabelle erstellen :)