2015-03-04 7 views
6

nella mia definizione della tabella, ho una colonna definita in questo modo:filtro SQLAlchemy confrontando datetime.now() e di default colonna della data

created_date = Column(DateTime, nullable=False, default=datetime.now) 

voglio interrogare un esempio quando la sua data di creazione è uguale alla corrente data (ad es. se è stata creata oggi).

Così ho provato qualcosa di simile:

res = session.query(Object).filter(datetime.now() == Object.created_date) 

non funziona mai, perché due date sono confrontati in secondi immagino, così non saranno mai uguali tra loro. Poi ho provato questo:

res = session.query(Object).filter((datetime.now() - Object.created_date).days < 1) 

mentre (datetime.now() - datetime.now()).days opere in pitone, doesnt lavoro nella mia situazione qui. ho ottenuto errore dice: Né l'oggetto 'BinaryExpression' né l'oggetto 'Comparator' ha un attributo 'giorni'.

Quindi, come devo fare una query che filtra le istanze create in un giorno corrente? Grazie!

+0

bene, doesnt lavoro praticamente. dicendo che funziona, intendo che restituirà un valore che è -1. –

+0

quale libreria datetime e quale versione di python stai usando? Non penso proprio che ci sia un attributo 'days' per l'istanza' datetime' –

risposta

3

Dubito che (datetime.now() - datetime.now()).days lavori dal datetime.datetime solo l'istanza ha attributo day anziché days. Utilizzando datetime.now().days si tradurrebbe in AttributeError: 'datetime.datetime' object has no attribute 'days'

Si potrebbe provare questo:

from datetime import timedelta 

res = session.query(Object).filter(
    (Object.created_date+timedelta(days=1))>datetime.now()) 
+0

sì! questo funziona perfettamente !. Faccio "da datetime import datetime' e uso python 2.7. 'datetime.now() - datetime.now()' diventerà un oggetto timedelta, che ha l'attributo 'days'. Grazie per l'aiuto! –

+0

@shangyeshen Oops, sembra '(datetime.now() - datetime.now()). Days' do lavoro. Quindi il tuo codice d'origine produce errori potrebbe perché 'datetime.now()' non è realmente compatibile con 'Object.created_date' con il tipo' DateTime' di SQLAlcehmy? Devono essere investigati ... –