2009-02-28 29 views
22

Tôi đã tạo một thuộc tính mới cho mô hình db của mình trong kho dữ liệu Google App Engine.AppEngine: Kho dữ liệu truy vấn cho các bản ghi với <missing> giá trị

Cũ:

class Logo(db.Model): 
    name = db.StringProperty() 
    image = db.BlobProperty() 

mới:

class Logo(db.Model): 
    name = db.StringProperty() 
    image = db.BlobProperty() 
    is_approved = db.BooleanProperty(default=False) 

Làm thế nào để truy vấn cho các hồ sơ tranh Nhật Bản, trong đó không có giá trị 'is_approved' thiết lập? Tôi đã thử

logos.filter("is_approved = ", None) 

nhưng nó không hoạt động. Trong Trình xem dữ liệu, các giá trị trường mới được hiển thị dưới dạng.

Trả lời

33

Theo tài liệu App Engine trên Queries and Indexes, có sự phân biệt giữa các đơn vị có không có giá trị cho một tài sản, và những người có một giá trị null cho nó; và "Các đối tượng không có thuộc tính được lọc không bao giờ được trả lại bởi truy vấn". Vì vậy, nó không thể viết một truy vấn cho các hồ sơ cũ.

Bài viết hữu ích là Updating Your Model's Schema, có nghĩa là cách duy nhất hiện được hỗ trợ để tìm các thực thể thiếu một số thuộc tính là kiểm tra tất cả chúng. Bài viết có mã ví dụ cho thấy làm thế nào để chu kỳ thông qua một tập lớn các thực thể và cập nhật chúng.

+4

Marzia từ Google đã xác nhận không có cách nào để truy vấn các giá trị bị thiếu. – gravitation

2

Có thể điều này đã thay đổi, nhưng tôi có thể lọc các bản ghi dựa trên các trường null.

Khi tôi thử truy vấn GQL SELECT * FROM Contact WHERE demo=NULL, nó chỉ trả về các bản ghi mà trường bản demo bị thiếu.

Theo doc http://code.google.com/appengine/docs/python/datastore/gqlreference.html:

Phía bên tay phải của một so sánh có thể là một trong những cách sau (như phù hợp với kiểu dữ liệu của tài sản): [...] một Boolean đen, như TRUE hoặc FALSE; các NULL chữ, đại diện cho giá trị null (Không có trong Python).

Tôi không chắc rằng "null" cũng giống như "mất tích" mặc dù: trong trường hợp của tôi, các lĩnh vực này đã tồn tại trong mô hình của tôi nhưng không được dân cư trên tạo vật. Có lẽ Federico bạn có thể cho chúng tôi biết nếu truy vấn NULL hoạt động trong trường hợp cụ thể của bạn?

+2

Trường này không bị thiếu nếu nó là một phần của mô hình của bạn tại thời điểm thực thể được tạo. Và nó đã được phổ biến trên sự sáng tạo, ngay cả khi nó được dân cư với 'Không có' hoặc chuỗi rỗng. – geoffspear

+1

Null is null,! = Missing. Nó thực sự chiếm không gian cả trong Datastore và Indexes! – ZiglioUK

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