2013-03-15 15 views
14

ho bisogno di sostituire le mie chiamate a sqlalchemy.func.current_timestamp() con qualcosa che genera "CURRENT_TIMESTAMP AT TIME ZONE 'UTC'"HowTo? CURRENT_TIMESTAMP AT TIME ZONE 'UTC'

chiunque hanno consigli veloce?

(scuse per doubleposting questo + lista qui sqlalchemy, ma questo qualcosa di rotto nella produzione, hanno bisogno di una soluzione rapida)

risposta

26

Una soluzione rapida sarebbe quella di effettuare le seguenti operazioni:

func.current_timestamp().op('AT TIME ZONE')('UTC') 

Una più corretta il modo è utilizzare l'estensione compiler e definire la compilazione personalizzata di CURRENT_TIMESTAMP. In realtà, c'è già un example nei suoi documenti, che utilizza un approccio diverso (funzione TIMEZONE). Dal momento che è sufficiente questo per Postgres (presumo dalle vostre precedenti email in SA mailing list che si sta utilizzando Postgres), ecco un altro (più bello) soluzione rapida:

func.timezone('UTC', func.current_timestamp()) 
+0

mi dimentico sempre come fare questo. Stavo cercando su Google per minuti prima di trovarlo. Tutto quello che sto dicendo è, grazie per la condivisione. – Sri

+2

Nessuno di questi funziona se la funzione è usata in 'server_default' in una definizione' Column'; in tal caso l'approccio nell'esempio di riferimento (ora [qui] (http://docs.sqlalchemy.org/en/latest/core/compiler.html#utc-timestamp-function)) funziona. – jtniehof

Problemi correlati