Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Python-Mysql-Fehler in der Abfrage

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 :)