अस्वीकरण: मैं अभी भी Django सीख रहा हूं, इसलिए मुझे यहां कुछ याद आ रहा है, लेकिन मैं नहीं देख सकता कि यह क्या होगा ...QuerySet.query में संभावित Django बग?
मैं पाइथन 2.6.1 और Django 1.2.1 चला रहा हूं।
(InteractiveConsole)
>>> from myproject.myapp.models import *
>>> qs = Identifier.objects.filter(Q(key="a") | Q(key="b"))
>>> print qs.query
SELECT `app_identifier`.`id`, `app_identifier`.`user_id`,
`app_identifier`.`key`, `app_identifier`.`value` FROM
`app_identifier` WHERE (`app_identifier`.`key` = a OR
`app_identifier`.`key` = b)
>>>
ध्यान दें कि यह "ए" या "बी" के आसपास उद्धरण नहीं डालता है! अब, मैंने यह निर्धारित किया है कि क्वेरी ठीक है। तो, हकीकत में, ऐसा करना चाहिए। लेकिन, यह बहुत परेशान है कि क्वेरी को प्रिंट करना गलत प्रिंट करता है। खास तौर पर अगर मैं कुछ इस तरह ... किया
>>> qs = Identifier.objects.filter(Q(key=") AND") | Q(key="\"x\"); DROP TABLE
`app_identifier`"))
>>> print qs.query
SELECT `app_identifier`.`id`, `app_identifier`.`user_id`,
`app_identifier`.`key`, `app_identifier`.`value` FROM
`app_identifier` WHERE (`app_identifier`.`key` =) AND OR
`app_identifier`.`key` = "x"); DROP TABLE `app_identifier`)
>>>
कौन सा, जैसा कि आप देख सकते हैं, न केवल पूरी तरह से विकृत एसक्यूएल कोड बनाता है, लेकिन यह भी एक एसक्यूएल इंजेक्शन हमले का बीज है। अब, स्पष्ट रूप से यह वास्तव में काम नहीं करेगा, कई कारणों से (1. वाक्यविन्यास सभी गलत है, जानबूझकर, Django के व्यवहार की विषमता दिखाने के लिए। 2. Django वास्तव में इस तरह की क्वेरी निष्पादित नहीं करेगा, यह होगा वास्तव में उद्धरण और स्लेश डाल दें और जो कुछ भी ऐसा माना जाता है)।
लेकिन, यह वास्तव में भ्रमित करने में डिबगिंग करता है, और यह मुझे आश्चर्यचकित करता है कि मेरे Django स्थापना के साथ कुछ गलत हो गया है।
क्या यह आपके लिए होता है? यदि ऐसा है, तो आपके पास पाइथन और Django का कौन सा संस्करण है?
कोई विचार?
क्या आपने 'qs.query.as_sql()' कोशिश की? – Amarghosh
जैसा कि मैं इसे समझता हूं, QuerySet.query.as_sql() 1.2.1 से पहले कुछ Django संस्करण के रूप में काम नहीं करता है। मैं 1.2.1 का उपयोग कर Django दुनिया में आया हूं, इसलिए मुझे पूरा विवरण नहीं पता है, लेकिन इस विषय पर मेरे शोध में मैंने जो खोजा है। "प्रिंट qs.query.as_sql()" कारण "विशेषताएँ त्रुटि: 'क्वेरी' ऑब्जेक्ट में मेरी स्थापना पर 'as_sql' 'कोई विशेषता नहीं है। – MikeC8