ten eerste, zoals hier verteld:Controleer op geldige SQL-kolomnaam
Het komt uit het PostGre-document, maar omdat PostGre heel dicht bij de "ideale" SQL-syntaxis ligt, kan het hetzelfde zijn voor mysql... Dus geen haakjes in kolomnamen, geen spaties...
En ten tweede:Kolomnamen zijn geen strings :
De volgende syntaxis is geldig:
CREATE TABLE (test VARCHAR(100) NOT NULL, ...)
En de volgende is ongeldig en geeft een syntaxisfout:
CREATE TABLE ('test' VARCHAR(100) NOT NULL, ...)
Als je de '%s'-modifier gebruikt, worden de gegevens geparseerd als STRING. dus het omringt het met aanhalingstekens, wat ongeldig is...
Dus om je tabel te maken, raad ik een "for-lus" aan die gegevens valideert (met regexpr), en deze eenvoudig aan de string toevoegt:
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 += ");"
En dan kun je je tafel maken :)