2010-05-31 14 views
8

उम्मीद है कि यह एक काफी सरल सवाल होना चाहिए, मुझे बस इसका जवाब देने के लिए पायथन और डैंजो के बारे में पर्याप्त जानकारी नहीं है।Django: कच्चे एसक्यूएल क्वेरी बनाते हुए, एकाधिक/दोहराए गए पैराम पास करते हैं?

मैं Django में एक कच्चे SQL क्वेरी कि छह अलग पैरामीटर लेता है मिल गया है, जिनमें से पहले दो (centreLat और centreLng) प्रत्येक बार-बार कर रहे हैं:

query = "SELECT units, (SQRT(((lat-%s)*(lat-%s)) + ((lng-%s)*(lng-%s)))) AS distance FROM places WHERE lat<%s AND lat>%s AND lon<%s AND lon>%s ORDER BY distance;" 
params = [centreLat,centreLng,swLat,neLat,swLng,neLng] 
places = Place.objects.raw(query, params) 

मैं params वस्तु किस तरह तैयार करूँ और query स्ट्रिंग ताकि वे जान सकें कि कौन से पैरामीटर दोहराने के लिए और कहां?

उत्तर

12

आपके पास (कम से कम) दो विकल्प हैं। कि वे प्रकट करने के लिए की जरूरत है या तो आप क्रम में अपनी सूची में उन लोगों के बार-बार पैरामीटर शामिल हो सकते हैं - जिसका अर्थ है कि आप एक ही मूल्यों के साथ अपनी सूची में कई बार इस तरह खत्म होगा:

params = [centreLat,centreLng,swLat,neLat,swLng,neLng,centreLat,centreLng] 

या, आप प्रत्येक नाम दे सकते हैं

query = "SELECT units, (SQRT(((lat-%(lat)s)*(lat-%(lat)s)) + ((lng-%(lng)s)*(lng-%(lng)s)))) AS distance FROM places WHERE lat<%(lat)s AND lat>%(lat)s AND lon<%(lng)s AND lon>%(lng)s ORDER BY distance;" 
params = {'lat':centreLat,'lng':centreLng} 

(कि कोड को कॉपी नहीं है शब्दशः, मुझे यकीन है कि नहीं बिल्कुल है: इस तरह एक शब्दकोश का उपयोग कर और के बजाय सिर्फ एक "% s" आप इस्तेमाल कर सकते हैं का उपयोग कर "% (नाम) एस" पैरामीटर आपको क्या चाहिए)

+3

शब्दकोश का जवाब मुझे बेहतर लगता है। मैं हमेशा नामित पैरामीटर का उपयोग करना पसंद करता हूं। यह भी readabilty के लिए बेहतर है। –

संबंधित मुद्दे