sql >> Base de Datos >  >> RDS >> Mysql

error de python mysql en la consulta

en primer lugar, como se dice aquí:Comprobar el nombre de columna SQL válido

Viene de PostGre doc, pero debido a que PostGre está muy cerca de la sintaxis SQL "ideal", podría ser lo mismo para mysql... Así que no hay paréntesis en los nombres de las columnas, no hay espacios...

Y en segundo lugar, los nombres de las columnas no son cadenas :

La siguiente sintaxis es válida:

CREATE TABLE (test VARCHAR(100) NOT NULL, ...)

Y el siguiente no es válido y generará un error de sintaxis:

CREATE TABLE ('test' VARCHAR(100) NOT NULL, ...)

Cuando usa el modificador '%s', analiza los datos como STRING. entonces lo rodea con comillas, lo cual no es válido...

Entonces, para crear su tabla, sugiero un "bucle for" que valide los datos (con regexpr) y simplemente agréguelo a la cadena:

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 += ");"

Y luego puedes crear tu tabla :)