2013-02-08 17 views
11

मैं mysql पर एक क्वेरी भेजना चाहता हूं और एक सरणी प्राप्त करना चाहता हूं। लेकिन हालांकि मैं इसे करता हूं मैं इसे काम नहीं कर सकता। यहां मेरा कोड है:देखें फ़ंक्शन कोई प्रतिक्रिया नहीं लौटा

@app.route('/auth',methods=['GET','POST']) 
def auth(): 
    username = request.form['username'] 
    password = request.form['password'] 

    cur = db.cursor() 
    cur.execute("SELECT * FROM tbl_user WHERE username = '%s' " % username) 

    results = cur.fetchall() 

    for row in results: 
     print row[0] 

यह हमेशा कहता है, view function did not return a response। मैं क्या गलत कर रहा हूं?

+0

1) अपने पोस्ट कोड में इंडेंटेशन को ठीक करें और 2) अपने डीबी में एक ही क्वेरी चलाएं और देखें कि –

+0

क्या है, कृपया हमें पूरा ट्रेसबैक दें, और वेब फ्रेमवर्क का उपयोग करते हुए। –

+0

@MartijnPieters मैं फ्लास्क और MySQL पर एक स्टैब ले रहा हूं :) –

उत्तर

15

फ्लास्क इस अपवाद को फेंकता है क्योंकि आपका auth दृश्य कुछ भी वापस नहीं आया। अपने auth दृश्य से एक प्रतिक्रिया लौटें:

return 'Some response' 

MySQL परिणाम वापस करने के लिए, शायद एक स्ट्रिंग में एक साथ पंक्तियों में शामिल होने:

cur.execute("SELECT * FROM tbl_user WHERE username = '%s' " % username) 
return '\n'.join([', '.join(r) for r in cur]) 

या एक टेम्पलेट और return the rendered template परिभाषित करते हैं।

ध्यान दें कि आप वास्तव में अपने username पैरामीटर, के लिए स्ट्रिंग इंटरपोलेशन का उपयोग नहीं करना चाहते हैं, विशेष रूप से वेब एप्लिकेशन में। बजाय एसक्यूएल पैरामीटर का उपयोग करें:

cur.execute("SELECT * FROM tbl_user WHERE username = %s", (username,)) 

अब डेटाबेस ग्राहक आप के लिए के हवाले करना होगा और एसक्यूएल इंजेक्शन हमलों को रोकने के। यदि आप स्ट्रिंग इंटरपोलेशन का उपयोग करते हैं, this will happen

(यदि यह एक सभ्य डेटाबेस था (उदाहरण के लिए MySQL नहीं) डेटाबेस अब-जेनेरिक एसक्यूएल स्टेटमेंट ले सकता है और उसके लिए एक क्वेरी प्लान बना सकता है, तो फिर से बार-बार योजना का पुन: उपयोग करें क्योंकि आप उस क्वेरी को कई बार निष्पादित करते हैं; स्ट्रिंग इंटरपोलेशन जिसे आप रोक देंगे।)

+0

हाँ आप सही हैं, मैं कैसे कर सकता हूं एसक्यूएल से मिलान मिलान मूल्य? – saidozcan

+0

@ गैंडफ आप इस पर नए लगते हैं - मैं आपको एक ओआरएम का उपयोग करने की सलाह दूंगा - इससे जीवन आसान हो जाएगा - http://packages.python.org/Flask-SQLAlchemy/ –

+0

का एक पठन है, मैं अजगर के साथ शुरुआत कर रहा हूं, i आपकी सलाह लेगा, धन्यवाद :) – saidozcan