2016-04-12 4 views
1

Mein Python-Skript sieht wie folgt aus:eine Variable in SQL-Abfragen in Python

#!/usr/bin/python 
    import MySQLdb 

    u='ABNCSDS7612' 
    db = MySQLdb.connect(host="localhost",user="root",passwd="abc",db="mydb") 

    cur = db.cursor() 

    sql=("insert into t1(p_id,job_id) Values ((select p_id from t2 where name='OUTPUT'), 
(select job_id from job where job_uuid= "%s"))",(u)) 

    cur.execute(*sql) 

    db.commit() 

ich eine Insert-Anweisung am Brennen, wo ich 2 Spaltenwerte einfügen versuche, und ich möchte Wert der zweiten Spalte von a Variable in meinem Python-Skript u = 'ABNCSDS7612'. Ich habe Hilfe von vielen ähnlichen Posts bekommen, aber kein Glück. Ich sehe immer noch den Fehler wie folgt:

Es zeigt Fehler nach den Klammern, die nach% s in SQL auftreten. Kann mir bitte jemand helfen?

Antwort

3

Ungültiger Syntaxfehler ist wegen der Art, wie Sie die Anführungszeichen gesetzt haben.

Sie benötigen die Anführungszeichen um den Platzhalter tatsächlich nicht. Und Sie müssen Ihren Abfrageparameter in ein Tupel setzen. Außerdem würde ich die Abfrage auf mehreren Zeilen schreibt die Lesbarkeit zu verbessern:

sql = """ 
    insert into 
     t1(p_id,job_id) 
    Values 
     ((select p_id from t2 where name='OUTPUT'), 
     (select job_id from job where job_uuid = %s))""" 
cur.execute(sql, (u,)) 
+0

könnte auch gut sein, um den Punkt zu machen, dass ein Tupel in Python mit einem Wert ist '(u,)' (wie Sie) nicht "(u)" (wie das OP). –

+0

@BradK. Yup, die Notiz ist da in der Antwort..danke! – alecxe

0
#!/usr/bin/python 
import MySQLdb 

u='ABNCSDS7612' 
db = MySQLdb.connect(
host="localhost", 
user="root", 
passwd="abc", 
db="mydb") 

cur = db.cursor() 

sql="""insert into t1(p_id,job_id) Values 
((select p_id from t2 where name='OUTPUT'), 
(select job_id from job where job_uuid= '%s'))""" % (u) 

cur.execute(*sql) 
db.commit() 
+0

Was würde passieren, wenn du folgenden Wert hättest: 'O'Brien'? – alecxe

+1

Während dieser Code die Frage beantworten kann, würde die Bereitstellung eines zusätzlichen Kontexts bezüglich der Frage, warum und/oder wie er die Frage beantwortet, seinen langfristigen Wert signifikant verbessern. Bitte [bearbeiten] Sie Ihre Antwort, um eine Erklärung hinzuzufügen. – CodeMouse92

Verwandte Themen