2013-07-10 13 views
6

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

मुझे फिर func.lower के बारे में पता चला और इसे क्वेरी में शामिल करने का प्रयास किया लेकिन यह या तो त्रुटियां या सिर्फ काम नहीं करती है, क्या कोई मुझे एसक्यूएल का उपयोग करके केस असंवेदनशील आरोही क्रम क्रम कैसे करना है इसका एक उदाहरण उदाहरण दे सकता है कीमिया।

नीचे

क्या मैं अब तक (त्रुटि फेंकता है) है: -

session.query(ResultsDBHistory).order_by(func.lower(asc(history_sort_order_column))).all() 

अजगर 2.6.6 एसक्यूएल कीमिया 0.7.10

उत्तर

10

आप रिवर्स अपने कार्यों का आदेश देने की जरूरत है।

वैकल्पिक रूप से, NOCASE को मिलान बदलने के लिए:

from sqlalchemy.sql import collate 

session.query(ResultsDBHistory).order_by(asc(collate(history_sort_order_column, 'NOCASE'))).all() 

जो यकीनन एक बेहतर विचार वैसे भी है।

मैं नहीं लगताASC की आवश्यकता है, कि है छोड़ना चाहते हैं कि आपके कोड कुछ हद तक सरल:

from sqlalchemy.sql import collate 

session.query(ResultsDBHistory).order_by(collate(history_sort_order_column, 'NOCASE')).all() 
+0

हम्म मैं नहीं कर सकते यह काम करने के लिए, जैसे ही मैं मुक़ाबला या यह बंद हो जाता है func.lower का उपयोग मिलता है सॉर्ट ऑर्डर पूरी तरह से और आईडी द्वारा सॉर्ट करने के लिए केवल डिफ़ॉल्ट। काम करने के लिए मैं इसे प्राप्त करने का एकमात्र तरीका कॉलम के लिए संयोजन स्थापित कर रहा हूं, मुझे सीधे डेटाबेस पर NOCASE के साथ कोई समस्या है और फिर केस असंवेदनशील क्वेरी करने का प्रयास करने की अनदेखी करते हैं, इस पर कोई विचार क्यों नहीं हो रहा है? 'Tablename (history_sort_order_column मुक़ाबला NOCASE)' सूचकांक ResultsDBHistory बनाएँ: – Paul

+0

शायद आप मिलान आदेश के लिए एक सूचकांक बनाना होगा। –

+0

नहीं है, सूचकांक गति चीजों में मदद मिलेगी, लेकिन मिलान अभी भी काम करना चाहिए, को देखने के http://www.sqlite.org/datatype3.html#collation –

0

आप क्वेरी के बाद एक छंटाई करने का सोचा है।

session.query(ResultsDBHistory).order_by(asc(func.lower(history_sort_order_column))).all() 

तो कम पहले आरोही क्रम, तो घोषित:

res = session.query(ResultsDBHistory).all() 
res.sort() #sort as the way you like 
संबंधित मुद्दे