Understand that this will not affect django for the next several releases.
Probably django 2.0. The transition from db-api 2 to db-api 3 will be a
lot like the transition from Python 2 to Python 3. You will have to import
a different module to get the different behavior, and today's api-2
interface will linger around for innumerable years to come.
The reason that 'format' and 'pyformat' have fallen into disfavor is that
they *look* like the %s and %(identifier)s used by the string "%" operator,
but they don't quite *work* like them. That causes no small amount of
confusion and trouble -- such as having to use %%s sometimes but not
others. I need not explain to this group, you have all been bitten by it,
or will be. Someday, some poor human will, I suspect, have to look at
every occurrence of %s in the entire django code base and decide whether to
replace it with '?' because it is going to an SQL query, or with "{}"
because it will be a string format operation. The only examples of %s still
left will be in templates, and in ADO connection strings. [Having heard
myself say that, I may decide to write a .format() method for Python 2.5 so
that I can keep them out of ADO connection strings -- so that that problem
would never appear. Must give us pause.]
Expect % as a format specifier in an SQL query to go away ... someday ...
but not today, and not tomorrow.
--
Vernon Cole
On Wednesday, May 22, 2013 3:37:55 AM UTC-6, roman wrote:
>
> Hello,
>
>
> the docs say:
>
> """
> Passing parameters into raw()
>
> If you need to perform parameterized queries, you can use the params
> argument to raw():
>
> >>> lname = 'Doe'
> >>> Person.objects.raw('SELECT * FROM myapp_person WHERE last_name = %s',
> [lname])
>
> params is a list of parameters. You’ll use %s placeholders in the
> query string (regardless of your database engine); they’ll be replaced
> with parameters from the params list.
> """
>
> howerver this woks just fine and I see no reason why this should not be
> done:
>
> >>> param = dict(lname = 'Doe')
> >>> qs = Person.objects.raw('SELECT * FROM myapp_person WHERE last_name =
> %(lname)s', param)
>
> however still this fails:
>
> >>> repr(qs)
> /home/user/vpy/dev/lib/python2.7/site-packages/django/db/models/query.pyc
> in __repr__(self)
> 1530
> 1531 def __repr__(self):
> -> 1532 return "<RawQuerySet: %r>" % (self.raw_query %
> tuple(self.params))
> 1533
> 1534 def __getitem__(self, k):
>
> TypeError: format requires a mapping
>
> If no one objects, I could write a patch to the code and the docs that
> implements the functionality.
>
> Regards Roman
>
--
You received this message because you are subscribed to the Google Groups
"Django developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-developers?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.