2016-12-29 83 views
0

我使Python代碼可以與MySQL和Flask一起工作。TypeError:無法連接Flask中的'str'和'float'對象

如果用戶在web中輸入位置名稱和半徑,Python代碼會搜索有關MySQL中半徑內位置和其他位置的信息。

這裏是我的代碼

「名字」是由用戶輸入地點名稱。
'ron'是用戶輸入的半徑。

@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) 

但「類型錯誤:不能連接‘STR’和‘浮動’對象」是發生在半徑範圍內搜索的位置的最後一個SQL語句。

我該如何解決?
我希望你的建議。

回答

2

row2[]Float但您試圖將它與String連接起來。 Python有一個嚴格的類型檢查(沒有隱式類型轉換)。解決方案是將row2[index]更改爲字符串。試試這個: -

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

謝謝。我非常感謝你的幫助。 – Kown

+0

樂意提供幫助。如果您對答案滿意,請接受爲解決方案。 –

相關問題