|
From: Sébastien S. <sa...@us...> - 2008-04-15 16:41:04
|
Hi Skip,
I should definitely write some documentation about this.
In the mean time, here is an example that I use myself to shift the
origin of Sybase dates and datetimes so that it corresponds to the ones
used by Oracle:
import Sybase
from datetime import date, datetime
MY_DATE_ORIGIN = date(1752, 9, 14)
MY_DATETIME_ORIGIN = datetime(1752, 9, 14, 0, 0)
SYBASE_DATE_ORIGIN = date(1753, 1, 1)
SYBASE_DATETIME_ORIGIN = datetime(1753, 1, 1, 0, 0)
outputmap = dict(Sybase.DateTimeAsPython)
def change_outdatetime_origin(val):
d = datetime(val.year, val.month + 1, val.day,
val.hour, val.minute,
val.second, val.msecond * 1000)
if d.date() == SYBASE_DATE_ORIGIN:
d = MY_DATETIME_ORIGIN
return d
def change_outdate_origin(val):
d = date(val.year, val.month + 1, val.day)
if d == SYBASE_DATE_ORIGIN:
d = MY_DATE_ORIGIN
return d
outputmap.update({
Sybase.CS_DATETIME_TYPE: change_outdatetime_origin,
Sybase.CS_DATETIME4_TYPE: change_outdatetime_origin,
Sybase.CS_DATE_TYPE: change_outdate_origin })
def change_indate_origin(val):
if val < SYBASE_DATE_ORIGIN:
val = SYBASE_DATE_ORIGIN
return val
def change_indatetime_origin(val):
if val < SYBASE_DATETIME_ORIGIN:
val = SYBASE_DATETIME_ORIGIN
return val
inputmap = { datetime: change_indatetime_origin,
date: change_indate_origin }
conn = Sybase.connect(server, user, password, database,
inputmap=inputmap, outputmap=outputmap)
regards
--
Sébastien Sablé
sk...@po... a écrit :
> In the python-sybase documentation it says 0.39 implements Carsten Haese's
> type mapping extension to the DB-API. That specification is a bit ambiguous
> when it comes to naming the keys in the input and output maps. It says:
>
> When a value is fetched from the database, if the value is not None, its
> column type (as it would be indicated in cursor.description) is looked
> up in outputmap, and the resulting callable object is called upon to
> convert the fetched value...
>
> The DB-API uses integer type codes in the description tuple, not strings.
> PEP 249 says:
>
> The type_code can be interpreted by comparing it to the Type Objects
> specified in the section below.
>
> Later on it says:
>
> The type_code must compare equal to one of Type Objects defined below.
>
> What am I supposed to use as keys in my input and output maps? Python
> strings (as Carsten's document suggests)? Ints (implied by how type_codes
> are represeted in .description)? Type Objects? Is there a list somewhere
> of valid key values? Any example usage? I'm specifically interested in
> transparently representing dates and times using objects from Python's
> datetime module.
>
> Thanks,
>
|