inserting/retriving dates in psycopg

Michele Simionato michele.simionato at gmail.com
Wed Jan 4 11:41:00 EST 2006


Look at this example:

>>> import psycopg
>>> psycopg.__version__
'1.1.19'
>>> import datetime
>>> today = datetime.datetime.today()
>>> co = psycopg.connect('')
>>> cu = co.cursor()

>>> cu.execute('CREATE TABLE example (date date)')
>>> cu.execute("INSERT into example VALUES (%s)", (today,))
Traceback (most recent call last):
  File "/usr/lib/python2.4/doctest.py", line 1243, in __run
    compileflags, 1) in test.globs
  File "<doctest __main__[6]>", line 1, in ?
    cu.execute("INSERT into example VALUES (%s)", (today,))
ProgrammingError: ERROR:  syntax error at or near "17" at character 40

    INSERT into example VALUES (2006-01-04 17:19:03.354615)

Is there a smart way of solving this, without stripping the date by
hand?
Also, if I insert the date as a string

>>> cu.execute("INSERT into example VALUES ('2006-01-04')")
>>> co.commit()

I get back a DateTime object (I think a mxDateTime object)

>>> cu.execute("SELECT * from example")
>>> d = cu.fetchone()[0]
>>> print type(d)
 <type 'DateTime'>

and NOT a datetime.datetime.

So I need an adaptation mechanism; alternatively it would be enough for
me to be able
to redefine the __str__ representation of psycopg DateTime objects (
which are defined
at C level, so I cannot just override the __str__ method).

Any  hints? I am sure there is a custom way to do this.

                Michele Simionato




More information about the Python-list mailing list