2011-01-13 50 views
26

Khi tôi làm điều nàyMột django QuerySet là gì?

>>> b = Blog.objects.all() 
>>> b 

tôi có được điều này

>>>[<Blog: Blog Title>,<Blog: Blog Tile>] 

Khi tôi truy vấn những gì b loại là,

>>> type(b) 

tôi có được điều này

>>> <class 'django.db.models.query.QuerySet'> 

gì điều này có nghĩa là ? nó là một kiểu dữ liệu như dict, list etc?

Ví dụ về cách tôi có thể tạo cấu trúc dữ liệu như QuerySet sẽ được đánh giá cao.

Tôi muốn biết cách django xây dựng QuerySet (chi tiết gory)

Gath.

+1

Bạn có thể xem mã nguồn của Django để xem chi tiết đẫm máu. Khác hơn thế, một QuerySet chỉ là một đối tượng giống như nhiều đối tượng khác, thỉnh thoảng nó hoạt động giống như một danh sách. –

+0

Đối với những gì nó là: http://docs.djangoproject.com/en/dev/ref/models/querysets/ Đối với cách nó hoạt động, như đã đề cập, có một cái nhìn vào mã nguồn. –

+0

Tại sao điều này lại được bình chọn? – Davy8

Trả lời

25

A django queryset giống như tên gọi, về cơ bản là tập hợp các truy vấn (sql), trong ví dụ trên print b.query sẽ cho bạn thấy truy vấn sql được tạo từ cuộc gọi django filter của bạn.

Vì truy vấn là lazy, truy vấn cơ sở dữ liệu không được thực hiện ngay lập tức, nhưng chỉ khi cần - khi truy vấn được đánh giá. Điều này xảy ra ví dụ nếu bạn gọi phương thức __str__ của nó khi bạn in nó, nếu bạn gọi list() trên đó, hoặc, điều gì xảy ra chủ yếu, bạn lặp lại nó (for post in b..). Sự lười biếng này sẽ giúp bạn tiết kiệm từ các truy vấn không cần thiết và cũng cho phép bạn chuỗi truy vấn và bộ lọc ví dụ (bạn có thể lọc một queryset thường xuyên như bạn muốn).

1

Một QuerySet đại diện cho một tập hợp các đối tượng từ cơ sở dữ liệu của bạn. Nó có thể có số không, một hoặc nhiều bộ lọc. Bộ lọc thu hẹp kết quả truy vấn dựa trên các thông số đã cho. Trong các thuật ngữ SQL, một QuerySet tương đương với một câu lệnh SELECT, và một bộ lọc là một mệnh đề giới hạn như WHERE hoặc LIMIT.

https://docs.djangoproject.com/en/1.8/topics/db/queries/

Các vấn đề liên quan