2010-11-10 10 views
5

जब मैं का उपयोग करें:सरल SQLite सवाल

for i in Selection: 
    Q = "SELECT columnA FROM DB WHERE wbcode='"+i+"' and commodity='1'" 
    cursor.execute(Q) 
    ydata[i] = cursor.fetchall() 

मैं:

ydata = {'GBR': [(u'695022',), (u'774291',), (u'791499',)... ]} 

मैं कैसे प्राप्त करने के लिए अपना कोड बदल सकते हैं:

ydata = {'GBR': [695022, 774291, 791499,...]} 

आपको बहुत बहुत धन्यवाद। obs: यह सिर्फ एक सरलीकृत उदाहरण है। एसक्यूएल इंजेक्शन के बारे में सिफारिश करने से बचने की कोशिश करें।

+4

+1 "एसक्यूएल इंजेक्शन के बारे में सिफारिशें करने से बचने का प्रयास करें" :) – Andomar

+0

यह इंजेक्शन की अनुमति नहीं देता है (यदि चयन 'उपयोगकर्ता इनपुट से आता है), तो यह कथन कैशिंग को भी प्रभावित करता है। असल में, इसे सही तरीके से करना कोई और जटिल नहीं है, इसलिए मैन्युअल रूप से अपने SQL कथन बनाने के लिए कोई औचित्य नहीं है। – adw

उत्तर

4
[int(x[0]) for x in cursor.fetchall()] 
+0

धन्यवाद, यह काम किया। – relima

+0

कभी-कभी मुझे मिलता है: ValueError: int(): NULL के लिए अमान्य शाब्दिक; क्या आपको यह तय करने के लिए कोई सुझाव होगा? – relima

+0

क्वेरी में जोड़ें: 'और कॉलम ए शून्य नहीं है –

2

इस पर आधारित और आपके अन्य प्रश्न के आधार पर, आपको SQLite के संबंध को समझने की आवश्यकता है और आप डेटाबेस को कैसे पॉप्युलेट कर रहे हैं। अन्य डेटाबेस की आवश्यकता है कि कॉलम में संग्रहीत मान एक ही प्रकार के होते हैं - उदाहरण के लिए सभी तार या सभी पूर्णांक। SQLite आपको कुछ भी स्टोर करने की अनुमति देता है ताकि प्रत्येक पंक्ति में टाइप अलग हो।

पहले अनुमान के लिए, यदि आप उस पंक्ति के लिए एक स्ट्रिंग डालते हैं तो आपको एक स्ट्रिंग आउट मिल जाएगा, एक पूर्णांक में डाल दिया जाएगा और आपको एक पूर्णांक मिल जाएगा। आपके मामले में आप तार निकाल रहे हैं क्योंकि आप पूर्णांक के बजाय तार डालते हैं।

हालांकि आप कॉलम एफ़िनिटी घोषित कर सकते हैं और SQLite डेटा डालने पर कनवर्ट करने का प्रयास करेगा। उदाहरण के लिए यदि किसी कॉलम में पूर्णांक एफ़िनिटी है तो यदि आप जो भी डालेंगे उसे सुरक्षित/सही रूप से पूर्णांक में परिवर्तित किया जा सकता है तो SQLite ऐसा करेगा, इसलिए स्ट्रिंग "1" को वास्तव में पूर्णांक 1 के रूप में संग्रहीत किया जाएगा जबकि "1 1" संग्रहीत किया जाएगा स्ट्रिंग "1 1" के रूप में।

विवरण को समझने के लिए इस पृष्ठ को पढ़ें। यदि आप इसे सही प्रकारों का उपयोग करने में डालते हैं तो आपको चीजों को डेटा प्राप्त करना बहुत आसान हो जाएगा।

http://www.sqlite.org/datatype3.html

आप CSV डेटा आयात कर रहे हैं तो APSW खोल शुरू करने और ".help आयात" का उपयोग कैसे इस से निपटने के लिए पर कुछ सुझाव प्राप्त करने के लिए।

+0

उत्कृष्ट। आपका बहुत बहुत धन्यवाद। – relima