Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Printing Django QuerySet SQL with ""

You can print a queryset's SQL as follows:

print str(queryset.query)

however, for some reason this removes quotation marks, so you get:

SELECT `tableA`.`fieldA` FROM `fieldA` WHERE `tableA`.`fieldB` = Foo

instead of:

SELECT `tableA`.`fieldA` FROM `fieldA` WHERE `tableA`.`fieldB` = "Foo"

notice the missing ""

How can this be corrected?

like image 876
Jonathan Livni Avatar asked Nov 13 '11 15:11

Jonathan Livni


2 Answers

If the underlying database is PostgreSQL you can do:

from django.db import connection
sql, params = queryset.query.sql_with_params()
cursor = connection.cursor()
cursor.mogrify(sql, params)

sql_with_params returns the plain query without any values substituted and the parameters that will be inserted in the query.

It is still not recommended to use .mogrify() for other purposes than debugging because the method may disappear in the future.

If you want to execute the query, you can/should just use .raw().

YourModel.objects.raw(sql, params)
like image 191
kev Avatar answered Oct 22 '22 02:10

kev


not quite what you want, but if you have DEBUG = True you can use

from django.db import connection
connection.queries

update:

looking at the Queryset __str__ method:

__str__(self)
|      Returns the query as a string of SQL with the parameter values
|      substituted in.
|      
|      Parameter values won't necessarily be quoted correctly, since that is
|      done by the database interface at execution time.
like image 4
second Avatar answered Oct 22 '22 00:10

second