Pergunta

Eu estou tentando registros de consulta no Google App Engine, onde um IntegerProperty é nulo (None). Isto é o que eu tentei, sem sucesso:

data = db.GqlQuery("SELECT * FROM MyModel WHERE intProp=:1",None)

E também com uma consulta:

query = db.Query(MyModel)
query = query.filter('intProp', None) 
data = query.fetch(limit=100)

Qualquer ajuda seria apreciada.

class MyModel(db.Model):
    intProp = db.IntegerProperty()
Foi útil?

Solução

Seu código parece correto. Você realmente tem todas as instâncias do MyModel com um intProp de None ...?

Editar : por comentário do OP é, aparentemente, uma questão de migração do esquema; acrescentou uma nova propriedade e espera entidades existentes para que ele apareça (definido como None). Isso não é como alterações de esquema no trabalho GAE, por os docs :

O armazenamento de dados do App Engine não exigir que todas as entidades que têm a mesma um conjunto de propriedades. Depois de atualizar o seu modelos para adicionar novas propriedades, existente entidades continuarão a existir sem estas propriedades. Em alguns situações, isso é bom, e você Não é necessário fazer mais nenhum trabalho. Quando que você iria querer voltar e atualização entidades existentes para que eles também têm as novas propriedades? uma situação seria quando você quer fazer uma consulta com base nas novas propriedades. Na nossa exemplo, com Pictures, consultas como "Mais popular" ou "menos popular" não voltaria fotos existentes, porque não fazer (ainda) têm a avaliações propriedades. Para corrigir isso, vamos precisa atualizar as entidades existentes no armazenamento de dados.

O ensaio estou citando continua mostrando uma maneira de fazê-lo, mas é uma abordagem à moda antiga bonita, de tarefas antes GAE tinha agendados, apis remotos, & c. Podemos fazê-lo melhor agora. Motor Fan App tem uma muito recente pós que mostra a abordagem geral (e um erro que ele cometeu durante a sua própria migração do esquema, para que outros possam evitá-lo!), e aponta para a API remota como a ferramenta chave; Ele também aponta para um módulo (a partir do projeto Rietveld open source core-revisão, iniciada por Guido van Rossum, autor de Python e um dos principais contribuintes para o desenvolvimento de App Engine) que faz a tarefa ordenadamente e corretamente (você vai precisar de ajustar esse código um pouco para que ele usa seus modelos & C em vez de Rietveld de, é claro).

Outras dicas

Eu consegui entidades consulta com um valor NULL usando um truque parecido com isto:

SELECT * FROM MyModel ONDE intprop <0

Naturalmente não há nenhuma garantie que um método tal nondocumented será compatível com versões futuras.

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