- No quoting
- No adaptation. So, some python objects will be used as is, not like
their SQL equivalents
Yes, there are situations, when output of `Query.__str__` is equal to
actual query. But for debugging reasons, it will be better to see real
query here. Also it is logical and expected behavior of this method - to
show actual query.
--
Ticket URL: <https://code.djangoproject.com/ticket/25705>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* status: new => assigned
* needs_better_patch: => 1
* needs_tests: => 1
* owner: nobody => Stranger6667
* needs_docs: => 0
* has_patch: 0 => 1
--
Ticket URL: <https://code.djangoproject.com/ticket/25705#comment:1>
* Attachment "ticket25705.patch" added.
Initial draft
Comment (by Stranger6667):
Commit:
https://github.com/Stranger6667/django/commit/b2e36668a6877fe29923493e5669402dd30d6421
This issue is more general case of #24991
--
Ticket URL: <https://code.djangoproject.com/ticket/25705#comment:2>
Comment (by timgraham):
This looks like a duplicate of #17741 and #25092 which are "wontfix",
however, I'm not sure I see any harm in your proposal besides the question
of whether or not it can be implemented on other database backends.
--
Ticket URL: <https://code.djangoproject.com/ticket/25705#comment:3>
* stage: Unreviewed => Accepted
--
Ticket URL: <https://code.djangoproject.com/ticket/25705#comment:4>
Comment (by Bernd Wechner):
Replying to [ticket:25705 Dmitry Dygalo]:
> Now it is just string interpolation of the SQL template with parameters
and in most cases produces invalid queries for the following reasons:
>
> - No quoting
> - No adaptation. So, some python objects will be used as is, not like
their SQL equivalents
>
> Yes, there are situations, when output of `Query.__str__` is equal to
actual query. But for debugging reasons, it will be better to see real
query here. Also it is logical and expected behavior of this method - to
show actual query.
Fascinating. I inadvertantly filed a duplicate of this it seems:
https://code.djangoproject.com/ticket/30132#ticket
and I would dearly love this fixed. In essence `Query.__str__` should
return exactly what is logged as per here:
https://docs.djangoproject.com/en/2.1/faq/models/#how-can-i-see-the-raw-
sql-queries-django-is-running
so we can reliably see and extract teh SQL of a query in a production
environment in which DEBUG is not enabled!
I would gladly fix this and PR it, if I had the skills and I am close to
that, as I am coding and debugging python, but single stepping into
`Query.__str__` didn't find me a quick easy answer and I bailed for now.
So if you have any tips as to where the code is that `Query.__str__` uses
to generate SQL and where the code is that logs SQL to
`connection.queries` I canbegin to look at it consider how this might be
fixed.
It seems to me an experience Django coder could fix this in minutes and
that there should be a regression test for this kind of code:
{{{
qs=model.objects.somequeryset
sql=str(qs.query)
raw_qs=model.objects.raw(sql)
}}}
I have a test bed in which I confirmed this failure here:
https://github.com/bernd-
wechner/DjangoTutorial/blob/238787c83ef8515aeeb405577980e71ff35664e8/Library/views.py
Let me know how I might help get this fixed sooner, given ti was reported
3 years ago and is still not fixed!
--
Ticket URL: <https://code.djangoproject.com/ticket/25705#comment:5>
Comment (by GitHub <noreply@…>):
In [changeset:"845042b3d9faaefef8855c2bab48bd9532cd00ca" 845042b3]:
{{{
#!CommitTicketReference repository=""
revision="845042b3d9faaefef8855c2bab48bd9532cd00ca"
Refs #25705 -- Fixed invalid SQL generated by SQLFuncMixin.as_sql() in
custom_lookups tests.
Generated SQL was invalid because parameters are quoted by a driver.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/25705#comment:6>
* cc: Petr Přikryl (added)
--
Ticket URL: <https://code.djangoproject.com/ticket/25705#comment:7>
Comment (by Mariusz Felisiak):
IMO we should close all related tickets as duplicates:
- #24803 was marked as a duplicate (empty strings in parameters),
- #24991 was marked as a duplicate (range types in parameters).
--
Ticket URL: <https://code.djangoproject.com/ticket/25705#comment:8>
* owner: Dmitry Dygalo => (none)
* status: assigned => new
--
Ticket URL: <https://code.djangoproject.com/ticket/25705#comment:9>