Datetime.datetime.now () gibt den alten Wert zurück

Ich sehe einen Datenspeicher Eintrag in Python durch passende Termine. Was ich will, wähle den Eintrag für "heute" an jedem Tag. Aber aus irgendeinem Grund, wenn ich meinen Code auf den gae Server hochlade, wird es nur für einen Tag arbeiten und am nächsten Tag gibt es immer noch den gleichen Wert zurück.

ZB wenn ich meinen Code hochladen und ihn am 07-01-2014 ausführen, gibt er den Wert von 07-01-2014 zurück, aber am nächsten Tag am 08-01-2014 geht es noch am 07-01-2014 zurück.

Wenn ich den gleichen Code neu ausliebe und ihn wieder ausführen werde, geht es weiter zum 08-01-2014, wird aber am nächsten Tag wieder scheitern.

In meiner Entwicklungsumgebung geht es gut …

Warum? Danke für Ihre Hilfe!

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 

2 Solutions collect form web for “Datetime.datetime.now () gibt den alten Wert zurück”

Wie @ blackbullet4749 erwähnt, ist es dieses Bit des Codes, der Ihnen Probleme verursacht:

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

Im Einzelnen erwarten Sie, dass dieser Code bei jedem Aufruf der Funktion datetime.datetime.now().date() wird.

Was tatsächlich passiert, ist, dass datetime.datetime.now().date() einmal ausgeführt wird, nicht wenn die Funktion aufgerufen wird, sondern wenn es zuerst definiert ist – das heißt, wenn das Funktionsobjekt instanziiert wird. Bei der Ausführung Ihres Codes führt Python tatsächlich diese Codezeilen aus und erstellt ein Funktionsobjekt, das wie jedes andere Objekt existiert. Die Standardparameter leben in einem als Attribut des Funktionsobjekts zugeordneten Tupel.

Um dies für dich selbst zu sehen, versuch das:

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

Was auch immer Sie in diesem Tupel sehen, das ausgedruckt wird, ist der Wert "from_date", der in Ihrem Code wieder verwendet wird.

Wenn du in der Lage bist, die Funktion mit dem Default-Verhalten aufzurufen, dass es die aktuelle Zeit braucht, aber mit der Option zu überschreiben, dann tun Sie dies stattdessen:

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

Weitere Details zu den Standardparameterwerten finden Sie in diesem Effbotpost .

Btw, nicht sicher, was diese Funktion zu tun ist. Scheint nichts zurückzugeben.

Es scheint, dass es nur die datetime bei der Bereitstellung der App. Verschieben Sie aus_date = datetime.datetime.now (). Date () aus der Definition in den Körper der Funktion und sehen, ob das funktioniert.

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

Sehen Sie, ob das Ihre Ergebnisse ändert. Dies geschieht normalerweise, wenn man einen Wert außerhalb einer Funktion festlegt, da er nie wieder aufgerufen wird, bis die App neu gestartet wird.

  • Was ist der beste Filter, um eine vollständige Name Datenspeicher-Eigenschaft mit nur den Vornamen abzufragen?
  • So aktualisieren Sie ein Schema des NDB-Modells
  • So reduzieren Sie die Anzahl der Anfragen an den Datenspeicher
  • Effiziente Möglichkeit, Beziehungswerte in NDB zu speichern
  • Cross Group (XG) Transaktionen und weitere Erläuterungen zur Nutzung
  • Daten werden auf localhost gespeichert, aber nicht auf gae datastore?
  • Video-Website auf Google-Anwendung-Engine
  • Zuweisen eines Autors zu einer Entität während der Erstellung
  • Google App Engine versucht, auf dev Daten zuzugreifen
  • Erstellen Sie eine gut aussehende URL für einen Schlüssel mit Vorfahren
  • Wie kann ich verhindern, dass die Anwendung datastore_v3.next () beim Aufruf von get_multi aufruft?
  • Python ist die beste Programmiersprache der Welt.