2016-12-29 4 views
0

Ich mache Python-Code mit MySQL und Flask arbeiten.TypeError: kann 'str' und 'float' Objekte in Flask nicht mit MySQL verketten

Wenn ein Benutzer einen Ortsnamen und Radius im Web eingibt, sucht Python-Code die Informationen über den Standort und andere Orte innerhalb des Radius in MySQL.

Hier ist mein Code

‚Namen‘ Ortsname vom Benutzer eingegeben ist.
'ron' ist der vom Benutzer eingegebene Radius.

@app.route('/index', methods=["GET","POST"]) 
def search_location(names, ron): 
    row2=[] 
    dis=ron/100 
    cur = mysql.connect().cursor() 
    cur.execute("select * from map_info where loc_name = '"+names+"'") 
    info_db = cur.fetchall() 

    cur.execute("select mapY, mapX from map_info where loc_name = '"+names+"'") 
     for row in cur: 
      print row 
    row2.append(float(row[0])) 
    row2.append(float(row[1])) 
    row2.append(int(dis)) 

    cur.execute("select loc_name, mapY, mapX (6371 * acos(cos(radians("+row2[0]+ ") * cos(radians(mapY)) * cos(radians(mapX)- radians("+row2[1]+"))+ sin(radians("+row2[0]+")) * sin(radians(mapY)))) as distance FROM map_info HAVING distance < "+row2[2]) 

return render_template('index.html', results=info_db, rons=ron) 

Aber: str ‚und‚float‘Objekte‚ist erfolgt in der letzten SQL-Anweisung‘Typeerror nicht verketten‘, der die Position innerhalb des Radius zu suchen.

Wie kann ich es beheben?
Ich würde Ihren Ratschlag schätzen.

Antwort

2

row2[] ist Float aber Sie versuchen, es mit einer String zu verketten. Python hat eine strenge Typprüfung (keine impliziten Typkonvertierungen). Lösung ist row2[index] zu Zeichenfolge zu ändern. Versuchen Sie Folgendes: -

cur.execute("select loc_name, mapY, mapX (6371 * acos(cos(radians("+str(row2[0])+ ") * cos(radians(mapY)) * cos(radians(mapX)- radians("+str(row2[1])+"))+ sin(radians("+str(row2[0])+")) * sin(radians(mapY)))) as distance FROM map_info HAVING distance < "+str(row2[2])) 
+1

Vielen Dank. Ich schätze deine Hilfe sehr. – Kown

+0

Gerne helfen. Wenn Sie mit der Antwort zufrieden sind, akzeptieren Sie bitte als Lösung. –

Verwandte Themen