On 2008-07-16 20:00, Keith Hughitt wrote:
Thanks Gabriel!

That helps clear things up for me. The above method works very well. I
only have one remaining question:
How can I pass a datetime object to MySQL?'

So far, what I've been doing is building the query as a string, for
example:

query = "INSERT INTO image VALUES(%d, %d, %s, '%s')" % (id, meas,
date, 'jpg')
cursor.execute(query)

Use binding parameters and it should work:

query = "INSERT INTO image VALUES(%d, %d, %s, '%s')"
cursor.execute(query, (id, meas, date, 'jpg'))

Database interfaces typically do not support timezones, so I'm not
sure why you are making things more complicated by adding a timezone
to the date/time value.

This works fine for regular datetime objects, which are passed as
strings similar
to: "2003-10-01 00:00:00." When incorporating a timezone, however, the
resulting string
is of the form "2003-10-01 00:00:00+00:00." Unfortunately, MySQL does
not recognize
the offset.

I know you said you don't use MySQL, but how would you do something
execute a similar query
on the database you normally interface with?


Thanks,
Keith


On Jul 15, 12:04 am, "Gabriel Genellina" <[EMAIL PROTECTED]>
wrote:
En Mon, 14 Jul 2008 12:06:30 -0300,KeithHughitt <[EMAIL PROTECTED]> escribió:



On Jul 12, 12:52 am, "Gabriel Genellina" <[EMAIL PROTECTED]>
wrote:
En Fri, 11 Jul 2008 15:42:37 -0300,KeithHughitt <[EMAIL PROTECTED]> escribió:
I am having a little trouble figuring out how to convert a python
datetime to UTC. I have a UTC date (e.g. 2008-07-11 00:00:00). I would
like to create a UTC date so that when I send it to MySQL (which
treats all dates at local dates by default), it will already have
incorporated the proper UTC offset. I've tried looking through the
docshttp://python.active-venture.com/lib/datetime-datetime.html), but
have not had any luck.
You have to use a "timezone aware" datetime object. If all you want is to store an UTC date, the tzinfo demo classes that you can find in the Python docs at <http://docs.python.org/lib/datetime-tzinfo.html> may be enough.
Thanks for advice Gabriel. I downloaded the tzinfo demo class, saved
it as
UTC.py and imported it. I'm still not exactly sure how to use it
though. It looks like
the file already creates an instance of the UTC tzinfo class (line 20:
"utc = UTC()"),
however, when I try to test it out in the interpreter, it cannot be
found. I'm new
to python, and there is probably something obvious I'm missing, but do
you have any ideas?
The import statement in Python doesn't behave the same way as similar statements in other languages - and it may be confusing you. I'll try to explain it using this example.
You have:
- a *file* UTC.py, containing the source code for the *module* UTC. It contains:
- a *class* definition (UTC) and
- an *instance* of that class, utc.

--- begin UTC.py ---If you pass a "timezone aware" datetime object as a SQL 
parameter
class UTC(tzinfo):
   ...
utc = UTC()
...
--- end UTC.py ---

Here is what I'm attempting:
============ output begin =============
Python 2.5.2 (r252:60911, Apr 21 2008, 11:12:42)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
import datetime, UTC
Here you have imported the *module* UTC. That is, the name UTC now refers to a newly created module just loaded from the UTC.py file.

t = datetime.datetime(2008, 7, 14, 00, 00, 00, UTC())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
The error comes from UTC(): UTC is a module, UTC() is attempting to "call" it, and since modules are not callable objects, we get a TypeError.

utc
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'utc' is not defined
The *only* name we have imported so far is UTC - the module. Lowercase utc isn't defined.

utc = UTC()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
Same as above...

Ok, how to solve it? We know that UTC refers to the *module* with the same name. To get the *class* inside that module, use UTC.UTC - try again in the interpreter. To create a new instance of that class, you can use UTC.UTC(). To obtain the instance already created in the UTC module, use UTC.utc

**OR**

Import those names explicitely:

py> from UTC import UTC

In this case the name UTC refers to the *class* inside the module.
In this particular example it may be confusing - both have the same name. Another example from the standard library: the poplib module contains a POP3 class, so after executing this line:

py> from poplib import POP3

the name POP3 refers to that class. The poplib module itself isn't directly available.
Back to the UTC module, you could use:

py> from UTC import utc

and now utc refers to the *instance* already created inside the module. This last form may be the most convenient in your case:

py> import datetime
py> from UTC import utc
py> print datetime.datetime(2008, 7, 14, 20, 30, 0, 0, utc)
2008-07-14 20:30:00+00:00

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

--
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Source  (#1, Jul 17 2008)
>>> Python/Zope Consulting and Support ...        http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ...             http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
________________________________________________________________________

:::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,MacOSX for free ! ::::


   eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
           Registered at Amtsgericht Duesseldorf: HRB 46611
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to