AppEngine: Inquérito armazenamento de dados para registros com valor
-
11-09-2019 - |
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.
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?