datetime.datetime.now () retorna o valor antigo

Estou procurando uma input do armazenamento de dados em python por datas correspondentes. O que eu quero é escolher a input para “hoje” em cada dia. Mas, por algum motivo, quando eu envio meu código para o servidor gae, ele funciona apenas por um dia e no dia seguinte ele ainda retorna o mesmo valor.

por exemplo, quando eu carregar meu código e executá-lo em 07-01-2014 ele retorna o valor de 07-01-2014, mas no dia seguinte em 08-01-2014 ele ainda retorna 07-01-2014.

Se eu reimplantar o mesmo código e executá-lo novamente, ele passará para o dia 08-01-2014, mas voltará a falhar no dia seguinte.

No meu ambiente de desenvolvimento funciona bem …

Por quê? Obrigado pela ajuda!

class ClosingValueHandler(webapp2.RequestHandler): def get(self): sct() 

(…)

 def sct(from_date=datetime.datetime.now().date()): value = getValueByDate(from_date) def getValueByDate(date): query = "SELECT * FROM Value WHERE date = DATE('%s')" % str(date) try: q = db.GqlQuery(query) value = q.get() except Exception as e: logging.error("Could not fetch Value value for date '%s' \n Error message: %s \n" % (str(date), str(e))) return return value 

Como @ blackbullet4749 menciona, é este pequeno código causando problemas:

 def sct(from_date=datetime.datetime.now().date()): value = getValueByDate(from_date) 

Especificamente, você espera que esse código execute datetime.datetime.now().date() toda vez que você chamar a function.

O que realmente acontece é que datetime.datetime.now().date() é executado uma vez, não quando a function é chamada, mas quando ela é definida pela primeira vez – ou seja, quando o object da function é instanciado. Ao executar seu código, o Python na verdade executa essas linhas de código e cria um object de function que existe exatamente como qualquer outro object. Os parâmetros padrão residem em uma tupla atribuída como um atributo do object de function.

Para ver isso por si mesmo, tente o seguinte:

 def sct(from_date=datetime.datetime.now().date()): value = getValueByDate(from_date) print sct.func_defaults 

Tudo o que você vê nessa tupla que é impressa é o valor “from_date” que continua sendo reutilizado em seu código.

Se você quiser chamar a function com o comportamento padrão, sendo a hora atual, mas com a opção de replace, faça isso:

 def sct(from_date=None): if from_date is None: from_date = datetime.datetime.now().date() value = getValueByDate(from_date) 

Para mais detalhes sobre valores de parâmetros padrão, veja este post effbot .

btw, não sei o que esta function é suposto fazer. Não parece retornar nada.

Parece que está apenas obtendo o datetime na implantação do aplicativo. Mova from_date = datetime.datetime.now (). Date () para fora da definição no corpo da function e veja se isso funciona.

 def sct(self): from_date=datetime.datetime.now().date() value = getValueByDate(from_date) 

Veja se isso muda seus resultados. Isso geralmente acontece quando você define um valor fora de uma function, já que nunca é chamado novamente até que o aplicativo seja reiniciado.