Pergunta

Eu criei uma nova propriedade para o meu modelo db no Google App Engine Datastore.

antiga:

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

Novo:

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

Como consulta para os registros logotipo, que não têm o valor definido 'is_approved'? Tentei

logos.filter("is_approved = ", None)

mas não funcionou. No Visualizador de Dados os novos valores de campo são exibidos como.

Foi útil?

Solução

De acordo com a documentação do App Engine em Consultas e índices , há uma distinção entre entidades que têm não valor para uma propriedade, e aqueles que têm um nulo valor para ele; e "entidades sem uma filtrada propriedade nunca são retornados por uma consulta." Portanto, não é possível escrever uma consulta para esses registros antigos.

Um artigo útil é Atualizando seu esquema do modelo, que diz que a única maneira de encontrar entidades faltando alguma propriedade é examinar todos eles atualmente suportados. O artigo tem código de exemplo mostrando como para percorrer um grande conjunto de entidades e atualizá-los.

Outras dicas

Talvez isso mudou, mas eu sou capaz de filtrar registros com base em nulo campos.

Quando tento a SELECT * FROM Contact WHERE demo=NULL consulta GQL, ele retorna somente os registros para o qual o campo de demonstração está faltando.

De acordo com o doc http://code.google.com/ appengine / docs / python / datastore / gqlreference.html :

O lado direito de uma comparação pode ser um dos seguintes (como apropriado para o tipo de dados da propriedade): [...] um booleano literal, como VERDADEIRO ou FALSO; NULL literal, o que representa o valor nulo (None em Python).

Eu não tenho certeza de que "null" é o mesmo que "faltando" no entanto: no meu caso, estes campos já existia no meu modelo, mas não foram preenchidos na criação. Talvez Federico você poderia nos informar se a consulta NULL funciona no seu caso específico?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top