Yasal Uyarı: Hala Django öğreniyorum, bu yüzden burada bir şey eksik olabilir, ama ben Python 2.6.1 ve Django 1.2.1 koşuyorum ... ne olurduPotansiyel Django Bug QuerySet.query'de mi?
göremez. etrafında "a" ya da "b" tırnak koymak olmadığını
(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)
>>>
Bildirimi! Şimdi, sorgusunun sorgusunu gerçekleştirdiğini belirledim. Yani, gerçekte, öyle yapıyor olmalı. Ancak, sorgunun yazdırılmasının yanlış yazdırması oldukça can sıkıcıdır. Böyle bir şey ... yaptım Özellikle
gördüğünüz gibi, tamamen hatalı biçimlendirilmiş bir SQL kodunu oluşturur, aynı zamanda SQL enjeksiyon saldırısı tohumlarını sahiptir kalmaz,>>> 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`)
>>>
. Şüphesiz, bu durum aslında pek çok nedenden ötürü işe yaramayacaktır (1. Sözdizimi, Django'nun davranışının tuhaflığını göstermek için kasıtlı olarak yanlıştır.) 2. Django, bu gibi bir sorguyu yürütmeyecektir. aslında tırnaklar ve eğik çizgi ve orada olması gerektiği gibi her şeyi koydu).
Ancak, bu gerçekten hata ayıklamayı kafa karıştırıcı yapar ve Django yüklememde bir şeyler ters gittiğinde beni meraklandırır.
Bu sizin için mi oluyor? Eğer öyleyse, Python ve Django'nun hangi versiyonuna sahipsiniz?
Herhangi bir düşünce?
'qs.query.as_sql()' yi denediniz mi? – Amarghosh
Anladığım kadarıyla, QuerySet.query.as_sql() işlevi artık 1.2.1'den önceki bazı Django sürümleri arasında çalışmaz. 1.2.1 kullanarak Django dünyasına girdim, bu yüzden tüm detayları bilmiyorum, ancak bu konudaki araştırmamda keşfettiğim şey bu. "print qs.query.as_sql()" neden olur "AttributeError: 'Query' nesnesinin" as_sql "özniteliği benim kurulumda yok. – MikeC8