]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
added patch for mxDateTime support, [ticket:5], courtesy jkakar@kakar.ca
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 11 Apr 2006 16:58:15 +0000 (16:58 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 11 Apr 2006 16:58:15 +0000 (16:58 +0000)
lib/sqlalchemy/databases/postgres.py

index a7285b4b5d1c2edde36036ebf1f2d83c9dbb31e0..8a063ca06e62943b8b89d30204c62803d210a067 100644 (file)
@@ -4,7 +4,7 @@
 # This module is part of SQLAlchemy and is released under
 # the MIT License: http://www.opensource.org/licenses/mit-license.php
 
-import sys, StringIO, string, types, re
+import datetime, sys, StringIO, string, types, re
 
 import sqlalchemy.util as util
 import sqlalchemy.sql as sql
@@ -16,6 +16,11 @@ from sqlalchemy.exceptions import *
 from sqlalchemy import *
 import information_schema as ischema
 
+try:
+    import mx.DateTime.DateTime as mxDateTime
+except:
+    mxDateTime = None
+
 try:
     import psycopg2 as psycopg
     #import psycopg2.psycopg1 as psycopg
@@ -43,15 +48,27 @@ class PG2DateTime(sqltypes.DateTime):
         return "TIMESTAMP"
 class PG1DateTime(sqltypes.DateTime):
     def convert_bind_param(self, value, engine):
-        # TODO: perform appropriate postgres1 conversion between Python DateTime/MXDateTime
-        # this one doesnt seem to work with the "emulation" mode
         if value is not None:
+            if isinstance(value, datetime.datetime):
+                seconds = float(str(value.second) + "."
+                                + str(value.microsecond))
+                mx_datetime = mxDateTime(value.year, value.month, value.day,
+                                         value.hour, value.minute,
+                                         seconds)
+                return psycopg.TimestampFromMx(mx_datetime)
             return psycopg.TimestampFromMx(value)
         else:
             return None
     def convert_result_value(self, value, engine):
-        # TODO: perform appropriate postgres1 conversion between Python DateTime/MXDateTime
-        return value
+        if value is None:
+            return None
+        second_parts = str(value.second).split(".")
+        seconds = int(second_parts[0])
+        microseconds = int(second_parts[1])
+        return datetime.datetime(value.year, value.month, value.day,
+                                 value.hour, value.minute, seconds,
+                                 microseconds)
+
     def get_col_spec(self):
         return "TIMESTAMP"
 class PG2Date(sqltypes.Date):