2016-05-07 3 views
3

Ich möchte eine Verbindung zwischen meinem Python-Code und einer SQL-Datenbank haben. Ich habe mehrere Möglichkeiten gelesen, aber ich bekomme die Ergebnisse nicht.PyMySQL-Variablen in Abfragen

conn = pymysql.connect(user=X,passwd=X,host=X,port=X,database=X, charset='utf8', autocommit=True) 
curs = conn.cursor() 

try: 
    curs.execute('SELECT id,sing_name,bir_yr FROM singers_list WHERE bir_yr = ? ',year) 
    data = curs.fetchall()  
    for i in data: 
     yield " Data: " + str(i) + "<br/>" 
except: 
    yield " Failed to get data from base<br/>" 

Wo Jahr ein int Python variabel ist. Ich bekomme die richtigen Ergebnisse mit:

Das bedeutet, ich bin erfolgreich mit der Datenbank verbinden. Wie kann ich Variablen in Abfragen einschließen? (Nicht nur ganze Zahlen, aber Strings zu oder jede Art)

Antwort

3

Sie haben die Parameter innerhalb eines iterable passieren - üblicherweise ein Tupel:

query = 'SELECT id,sing_name,bir_yr FROM singers_list WHERE bir_yr = %s' 
curs.execute(query, (year,)) 

Bitte beachte, dass ich auch die ? Platzhalter mit %s ersetzt haben.

Beachten Sie auch, dass der MySQL-Treiber automatisch die Typkonvertierung zwischen Python und MySQL übernimmt, bei Bedarf Zitate eingibt und die Parameter vor SQL-Injection-Angriffen schützt.

+0

Verwendet nicht '' 'irgendwie Standard und von allem außer PyMySql verwendet? – jlh

+0

@jlh Ich denke eigentlich, es ist anders herum :) Wie auch immer, ich konsultiere normalerweise die Treiberdokumentation über die Syntax der Parametrisierung. Danke, gute Frage. – alecxe