Mysql
 sql >> Database >  >> RDS >> Mysql

python errore mysql nella query

in primo luogo, come detto qui:Verifica il nome della colonna SQL valido

Viene da PostGre doc, ma poiché PostGre è molto vicino alla sintassi SQL "ideale", potrebbe essere lo stesso per mysql... Quindi nessuna parentesi nei nomi delle colonne, niente spazi...

E in secondo luogo, I nomi delle colonne non sono stringhe :

È valida la seguente sintassi:

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

E il seguente non è valido e genererà un errore di sintassi:

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

Quando usi il modificatore '%s', analizza i dati come STRING. quindi lo circonda con virgolette, il che non è valido...

Quindi, per creare la tua tabella, suggerisco un "ciclo for" che convalida i dati (con regexpr) e semplicemente lo aggiunga alla stringa:

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

E poi puoi creare la tua tabella :)