Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

पूछताछ के बाद क्वेरीसेट को फ़िल्टर करना संभव है? डीजेंगो

हां, आप मौजूदा क्वेरीसेट का पुन:उपयोग कर सकते हैं।

everyone = User.objects.filter(is_active=True)
active_not_deleted = everyone.filter(is_deleted=False)
active_is_deleted = everyone.filter(is_deleted=True)

यह वास्तव में कुछ भी तेजी से नहीं बना रहा है, वास्तव में, यह कोड ब्लॉक डेटाबेस के खिलाफ एक क्वेरी भी निष्पादित नहीं करेगा क्योंकि Django QuerySets का आलसी मूल्यांकन किया जाता है। मेरा मतलब यह है कि यह तब तक डेटाबेस को क्वेरी नहीं भेजेगा जब तक आपको वास्तव में मूल्यों की आवश्यकता न हो। यहां एक उदाहरण दिया गया है जो डेटाबेस से बात करेगा।

everyone = User.objects.filter(is_active=True)  # Building SQL...
active_not_deleted = everyone.filter(is_deleted=False)  # Building SQL...
active_is_deleted = everyone.filter(is_deleted=True)  # Building SQL...

# Example of the whole queryset being evaluated
for user in everyone:
    # This will execute the query against the database to return the list of users
    # i.e. "select * from user where is_active is True;"
    print(user)

# Example of using iterator to evaluate one object at a time from the queryset.
for user in active_not_deleted.iterator():
    # This will execute the query for each result, so it doesn't
    # load everything at once and it doesn't cache the results.
    # "select * from user where is_active is True and is_deleted is False limit 1 offset 0;"
    # The offset is incremented on each loop and another query is sent to retrieve the next user in the list.
    print(user)

पढ़ने की सलाह दें:

इस उत्तर के अतिरिक्त, यदि आप वास्तव में चाहते हैं तो आप एक ही प्रश्न बना सकते हैं और फिर पायथन में फ़िल्टर कर सकते हैं। ध्यान रहे, आप सूचियों पर बाद में फ़िल्टरिंग नहीं कर सके क्योंकि वे QuerySets नहीं हैं।

everyone = User.objects.filter(is_active=True)
active_not_deleted = list(filter(lambda user: user.is_deleted is False), list(everyone))
active_is_deleted = list(filter(lambda user: user.is_deleted is True), list(everyone))

इस अंतिम उदाहरण में, everyone एक क्वेरीसेट है, और active_not_deleted और active_is_deleted उपयोगकर्ता वस्तुओं की पायथन सूचियां हैं। everyone क्वेरीसेट का मूल्यांकन केवल एक बार पहली list(everyone) . में किया जाएगा कॉल करें, और फिर परिणाम कैश किए जाते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL क्वेरी कैश को कैसे सक्षम करें

  2. MySQL में दो तालिकाओं से कैसे चयन करें, भले ही एक तालिका की सभी पंक्तियों में दूसरे में संवाददाता न हों?

  3. 2 सरणियों को मिलाएं और मानों का योग करें (संख्यात्मक कुंजियाँ)

  4. MySQL:बड़ा VARCHAR बनाम टेक्स्ट?

  5. एक कॉलम चुनें अगर दूसरा खाली है