views:

1332

answers:

1

A mysql database table has a column whose datatype is time ( http://dev.mysql.com/doc/refman/5.0/en/time.html ). When the table data is accessed, Python returns the value of this column as a datetime.timedelta object. How do I extract the time out of this? (I didn't really understand what timedelta is for from the python manuals).

E.g. The column in the table contains the value "18:00:00" Python-MySQLdb returns this as datetime.timedelta(0, 64800)


Please ignore what is below (it does return different value) -

Added: Irrespective of the time value in the table, python-MySQLdb seems to only return datetime.timedelta(0, 64800).

Note: I use Python 2.4

+5  A: 

It's strange that Python returns the value as a datetime.timedelta. It probably should return a datetime.time. Anyway, it looks like it's returning the elapsed time since midnight (assuming the column in the table is 6:00 PM). In order to convert to a datetime.time, you can do the following::

value = datetime.timedelta(0, 64800)
(datetime.datetime.min + value).time()

datetime.datetime.min and datetime.time() are, of course, documented as part of the datetime module if you want more information.

A datetime.timedelta is, by the way, a representation of the difference between two datetime.datetime values. So if you subtract one datetime.datetime from another, you will get a datetime.timedelta. And if you add a datetime.datetime with a datetime.timedelta, you'll get a datetime.datetime. That's how the code above works.

Rick Copeland
I should mention that my first attempt was to use `datetime.time.min + value`, but this does not work, as `datetime.time` objects cannot be added to `datetime.timedelta` objects.
Rick Copeland
Python returns only datetime.timedelta(0, 64800), irrespective of the actual time value.
Sam
Yeah, I got fed up of the different ways dates and times are signalled across different DB-API layers, different versions of MySQLdb and Python, and even different available libraries (ie. mxDateTime). Now I just use integers and Unix time. Unless you need to do queries based on day-of-week or something, this is generally much easier.
bobince