2010-12-29 78 views
9

Làm thế nào để bạn xem SQL được tạo bởi Django cho một số DELETE?Xem truy vấn SQL cho bộ truy vấn Django xóa

Khi thực hiện một hoạt động SELECT trên một tập hợp truy vấn, bạn có thể làm điều này:

>>> qs = Entry.objects.filter(date__gt='2010-06-01') 
>>> qs.query.as_sql() 
('SELECT ...) 

Nhưng tôi không biết làm thế nào để có được SQL cho những gì xảy ra khi tôi làm qs.delete().

Dường như có liên quan nhiều hơn một chút vì Django "emulates the behavior of the SQL constraint ON DELETE CASCADE" khi xóa đối tượng.

(Bối cảnh:. Cố gắng để gỡ lỗi một IntegrityError tạo ra bởi một ràng buộc khoá ngoại khi xóa một đối tượng mô hình subclassed)

+1

Bạn có thể kiểm tra nhật ký lỗi DB :) –

+0

Bạn đã giải quyết IntegrityError chưa? Tôi đang gặp vấn đề tương tự ở đây. Thực tế kỳ lạ: myobject.delete() hoạt động từ "quản lý shell" nhưng không thành công từ chế độ xem ??? – Sdra

Trả lời

13

này hoạt động tốt đủ:

>>> from django.db import connection 
>>> connection.queries[:-10] 

tưởng những ngoại lệ xảy ra trước khi các truy vấn đã được thêm vào connection.queries, nhưng họ có thực sự hiện nay.

+0

Bạn nên chấp nhận câu trả lời của riêng bạn. Đó là cách đúng để xem các truy vấn được tạo ra. –

1

Bạn có thể thử chạy django-debug-toolbar và xem các truy vấn như vậy.

+0

Cách tiếp cận này không phải là rất chung chung (nói cho các lỗi xảy ra trong khi kiểm tra đơn vị), nhưng cảm ơn bạn. – tcarobruce