za prvé, jak je uvedeno zde:Zkontrolujte platný název sloupce SQL
Pochází z PostGre doc, ale protože PostGre je velmi blízko "ideální" syntaxi SQL, může to být stejné pro mysql... Takže žádné závorky do názvů sloupců, žádné mezery...
A za druhé, Názvy sloupců nejsou řetězce :
Platí následující syntaxe:
CREATE TABLE (test VARCHAR(100) NOT NULL, ...)
A následující je neplatný a vyvolá chybu syntaxe:
CREATE TABLE ('test' VARCHAR(100) NOT NULL, ...)
Když použijete modifikátor '%s', analyzuje data jako STRING. takže jej obklopuje uvozovkami, což je neplatné...
Takže pro vytvoření tabulky navrhuji "cyklus for", který ověřuje data (pomocí regexpr) a jednoduše je přidá do řetězce:
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 += ");"
A pak si můžete vytvořit svůj stůl :)