2011-11-13 31 views
7

Bạn có thể in SQL của queryset như sau:In ấn Django QuerySet SQL với ""

print str(queryset.query) 

Tuy nhiên, vì một lý do này loại bỏ dấu ngoặc kép, vì vậy bạn sẽ có được:

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

thay vì:

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

thông báo các thiếu ""

Làm cách nào để sửa lỗi này?

+0

Phần cuối cơ sở dữ liệu chuyển mẫu truy vấn và thông số riêng biệt tới cơ sở dữ liệu của bạn - Django chính nó _never_ cần tạo truy vấn được trích dẫn chính xác với trình giữ chỗ phổ biến. Đây là lý do tại sao bạn chỉ nhận được giải pháp không đầy đủ này cho mục đích gỡ lỗi. – lanzz

Trả lời

3

không khá gì bạn muốn, nhưng nếu bạn có DEBUG = True bạn có thể sử dụng

from django.db import connection 
connection.queries 

update:

nhìn vào Queryset__str__ phương pháp:

__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. 
+0

Chỉ hoạt động sau khi truy vấn đã được gửi trong khi tôi cần nó được in trước đó trong trường hợp có sự cố xảy ra với việc tìm nạp – Jonathan

1

Nếu đây là cho debug mục đích bạn nên nhìn vào django-debug-thanh công cụ sẽ cho bạn thấy tất cả các truy vấn chạy cho bất kỳ xem bạn đang xem

5

Nếu cơ sở dữ liệu cơ bản là PostgreSQL bạn có thể làm:

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

sql_with_params trả về truy vấn đơn giản mà không cần bất kỳ giá trị thay thế và các thông số đó sẽ được chèn vào trong truy vấn.

Vẫn còn không được khuyến nghị sử dụng .mogrify() cho các mục đích khác ngoài gỡ lỗi vì phương pháp có thể biến mất trong tương lai.

Nếu bạn muốn thực hiện truy vấn, bạn có thể/chỉ nên sử dụng .raw().

YourModel.objects.raw(sql, params)