Jossy
Jossy

Reputation: 1007

How do I return the difference between the current date and each query result date?

I want to get the difference between the current date_time and the date_time of each query record. I've tried:

matches = session.query((datetime.now() - Match.date_time_inferred).label("time_diff"))

But I get:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\Philip\Miniconda3\envs\capra\lib\site-packages\sqlalchemy\orm\query.py", line 3149, in __getitem__
    def __getitem__(self, item):
  File "C:\Users\Philip\Miniconda3\envs\capra\lib\site-packages\sqlalchemy\orm\query.py", line 3149, in __getitem__
    def __getitem__(self, item):
  File "C:\Users\Philip\Miniconda3\envs\capra\lib\site-packages\sqlalchemy\orm\loading.py", line 35, in instances
    def instances(query, cursor, context):
  File "C:\Users\Philip\Miniconda3\envs\capra\lib\site-packages\sqlalchemy\util\langhelpers.py", line 62, in __exit__
    def __exit__(self, type_, value, traceback):
  File "C:\Users\Philip\Miniconda3\envs\capra\lib\site-packages\sqlalchemy\util\compat.py", line 148, in raise_
    def raise_(
  File "C:\Users\Philip\Miniconda3\envs\capra\lib\site-packages\sqlalchemy\orm\loading.py", line 35, in instances
    def instances(query, cursor, context):
  File "C:\Users\Philip\Miniconda3\envs\capra\lib\site-packages\sqlalchemy\orm\loading.py", line 84, in <listcomp>
    keyed_tuple([proc(row) for proc in process])
  File "C:\Users\Philip\Miniconda3\envs\capra\lib\site-packages\sqlalchemy\orm\loading.py", line 84, in <listcomp>
    keyed_tuple([proc(row) for proc in process])
  File "C:\Users\Philip\Miniconda3\envs\capra\lib\site-packages\sqlalchemy\sql\sqltypes.py", line 1952, in process
    def process(value):
TypeError: unsupported operand type(s) for -: 'float' and 'datetime.datetime'

Where is the float coming from? Table1.date_time is definitely a date_time field...

Upvotes: 0

Views: 40

Answers (1)

Ruben Helsloot
Ruben Helsloot

Reputation: 13129

You can also use SQL functions for that. For example, for PostgreSQL, it would be

matches = session.query((func.now() - Match.date_time_inferred).label("time_diff"))

Then it only gets processed when it's at the database level, but you shouldn't get problems with values being the wrong type.

Upvotes: 1

Related Questions