2016-07-20 11 views
0
try: 
for row in data: 
    id = row[0] 
    name= row[1] 
    b.execute("INSERT INTO NAME (NUMBER, NAME, ID) VALUES (1, %s, %s)" %(name, id)) 
    conn.commit() 
except: #rest code 

Ich kann nicht Werte in die Datenbank (so viel wie ich es verstehe, weil der Name ist Variable), erhalte ich immer diese Fehlermeldung: ORA-00936: Ausdruck fehlt. Was ist falsch in meinem Code? Wie sollte ich den Parameter richtig angeben?Python cx_Oracle Variablen

Antwort

2

Verwenden Sie stattdessen Bind-Variablen. Verwenden Sie nicht% s und fügen Sie den Parameter direkt in die Zeichenfolge ein, da dies zu einer möglichen SQL-Injektion führt, ganz zu schweigen von Problemen beim Zitieren. Diese Methode erlaubt es, jeden legalen Wert zu überschreiten, ohne sich um solche Dinge kümmern zu müssen!

try: 
    for row in data: 
     id = row[0] 
     name= row[1] 
     b.execute("INSERT INTO NAME (NUMBER, NAME, ID) VALUES (1, :1, :2)", 
       (name, id)) 
    conn.commit() 
except: 
    # rest code