2016-08-07 30 views
-1

Wie bekomme ich web2py, um die aktuelle Zeit, wie sie vom DB-Server verstanden wird, in ein Datetime-Feld einzufügen. Wenn ich einfach datetime.now() verwende, wird die Client-Zeit eingefügt. In mySQL würde ich "NOW()" verwenden, um die Serverzeit zu erhalten: Gibt es dafür eine DAL-Verknüpfung?Web2py: Serverkonzept von datetime einfügen

Es ist für die Verwendung innerhalb einer update_or_insert() -Anweisung, wenn dies einen Unterschied macht.

+0

Warum ist das wichtig? Befindet sich Ihr mySQL Server in einer anderen Zeitzone als der Server, auf dem web2py läuft? Kannst du nicht einfach eine Anpassung vornehmen oder die UTC-Zeit verwenden? – Anthony

+0

Ich kann nicht unbedingt garantieren, dass es dasselbe ist (oder dass die Computer zeitlich synchronisiert sind), obwohl ich denke, dass es wahrscheinlich ist. Ich greife auch auf diese Daten von außerhalb von web2py zu, möglicherweise von einer anderen Maschine, sodass es in diesem Fall am sichersten ist, sich auf die DB-Serverzeit zu verlassen, anstatt auf den Computer, auf dem web2py läuft. – user2667066

Antwort

1

Ich glaube nicht, dass Sie eine SQL-Funktion direkt an die Methoden DAL .insert oder .update_or_insert übergeben können, da alle Werte, die übergeben werden, am Ende zitiert werden. Stattdessen müssen Sie die Methode .executesql() verwenden und die auszuführende SQL übergeben. Wenn Sie die SQL-Generierung wollen helfen, können Sie die ._insert Methode verwenden, um eine Zeichenfolge zu erzeugen, und dann die Anführungszeichen entfernen um die „NOW()“ Funktion:

query = db.mytable._insert(mytime='NOW()').replace("'NOW()'", "NOW()") 
db.executesql(query) 

Natürlich können Sie nicht in der Lage sein, Verwenden Sie die .update_or_insert Methode mit diesem Ansatz, aber seine Logik ist nicht kompliziert, so dass Sie leicht Ihren eigenen Helfer implementieren können, um die .update_or_insert Logik sowie die obige Logik zu behandeln.