summaryrefslogtreecommitdiff
path: root/docs/topics
diff options
context:
space:
mode:
authorShai Berger <shai@platonix.com>2013-06-28 06:15:03 +0300
committerShai Berger <shai@platonix.com>2013-06-28 06:59:10 +0300
commitd097417025e71286ad5bbde6e0a79caacabbbd64 (patch)
tree007c58c8787cee32cf68d08683b7c5294e8a4ad1 /docs/topics
parent7c0b72a826a3637b30a57553ac83f6b913c33134 (diff)
Support 'pyformat' style parameters in raw queries, Refs #10070
Add support for Oracle, fix an issue with the repr of RawQuerySet, add tests and documentations. Also added a 'supports_paramstyle_pyformat' database feature, True by default, False for SQLite. Thanks Donald Stufft for review of documentation.
Diffstat (limited to 'docs/topics')
-rw-r--r--docs/topics/db/sql.txt25
1 files changed, 20 insertions, 5 deletions
diff --git a/docs/topics/db/sql.txt b/docs/topics/db/sql.txt
index 2ec31a4988..7437d51d28 100644
--- a/docs/topics/db/sql.txt
+++ b/docs/topics/db/sql.txt
@@ -166,9 +166,17 @@ 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.
+``params`` is a list or dictionary of parameters. You'll use ``%s``
+placeholders in the query string for a list, or ``%(key)s``
+placeholders for a dictionary (where ``key`` is replaced by a
+dictionary key, of course), regardless of your database engine. Such
+placeholders will be replaced with parameters from the ``params``
+argument.
+
+.. note:: Dictionary params not supported with SQLite
+
+ Dictionary params are not supported with the SQLite backend; with
+ this backend, you must pass parameters as a list.
.. warning::
@@ -181,14 +189,21 @@ parameters from the ``params`` list.
**Don't.**
- Using the ``params`` list completely protects you from `SQL injection
+ Using the ``params`` argument completely protects you from `SQL injection
attacks`__, a common exploit where attackers inject arbitrary SQL into
your database. If you use string interpolation, sooner or later you'll
fall victim to SQL injection. As long as you remember to always use the
- ``params`` list you'll be protected.
+ ``params`` argument you'll be protected.
__ http://en.wikipedia.org/wiki/SQL_injection
+.. versionchanged:: 1.6
+
+ In Django 1.5 and earlier, you could pass parameters as dictionaries
+ when using PostgreSQL or MySQL, although this wasn't documented. Now
+ you can also do this whem using Oracle, and it is officially supported.
+
+
.. _executing-custom-sql:
Executing custom SQL directly