]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- sqlite better handles datetime/date/time objects mixed and matched
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 17 Jun 2007 00:10:04 +0000 (00:10 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 17 Jun 2007 00:10:04 +0000 (00:10 +0000)
with various Date/Time/DateTime columns

CHANGES
lib/sqlalchemy/databases/sqlite.py
test/sql/testtypes.py

diff --git a/CHANGES b/CHANGES
index 62118dab1351eb10a019d30444fb18b6285d8b28..ce3e86c2c087527587e9b8fe87793b95d4e476b9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
       up ORM decision making [ticket:593]
 - mysql
     - added 'fields' to reserved words [ticket:590]
+- sqlite
+    - sqlite better handles datetime/date/time objects mixed and matched
+      with various Date/Time/DateTime columns
+
     
 0.3.8
 - engines
index 7c5cbccbe5b725a60a48907fe4da2723a0502abf..aaaf55697f87e87e81a0142a1c2fab55f9b6a757 100644 (file)
@@ -32,11 +32,14 @@ class SLSmallInteger(sqltypes.Smallinteger):
 class DateTimeMixin(object):
     def convert_bind_param(self, value, dialect):
         if value is not None:
-            return str(value)
+            if getattr(value, 'microsecond', None) is not None:
+                return value.strftime(self.__format__ + "." + str(value.microsecond))
+            else:
+                return value.strftime(self.__format__)
         else:
             return None
 
-    def _cvt(self, value, dialect, fmt):
+    def _cvt(self, value, dialect):
         if value is None:
             return None
         try:
@@ -44,30 +47,36 @@ class DateTimeMixin(object):
             microsecond = int(microsecond)
         except ValueError:
             (value, microsecond) = (value, 0)
-        return time.strptime(value, fmt)[0:6] + (microsecond,)
+        return time.strptime(value, self.__format__)[0:6] + (microsecond,)
 
 class SLDateTime(DateTimeMixin,sqltypes.DateTime):
+    __format__ = "%Y-%m-%d %H:%M:%S"
+    
     def get_col_spec(self):
         return "TIMESTAMP"
 
     def convert_result_value(self, value, dialect):
-        tup = self._cvt(value, dialect, "%Y-%m-%d %H:%M:%S")
+        tup = self._cvt(value, dialect)
         return tup and datetime.datetime(*tup)
 
 class SLDate(DateTimeMixin, sqltypes.Date):
+    __format__ = "%Y-%m-%d"
+
     def get_col_spec(self):
         return "DATE"
 
     def convert_result_value(self, value, dialect):
-        tup = self._cvt(value, dialect, "%Y-%m-%d")
+        tup = self._cvt(value, dialect)
         return tup and datetime.date(*tup[0:3])
 
 class SLTime(DateTimeMixin, sqltypes.Time):
+    __format__ = "%H:%M:%S"
+
     def get_col_spec(self):
         return "TIME"
 
     def convert_result_value(self, value, dialect):
-        tup = self._cvt(value, dialect, "%H:%M:%S")
+        tup = self._cvt(value, dialect)
         return tup and datetime.time(*tup[3:7])
 
 class SLText(sqltypes.TEXT):
index 376546ee8815811cb97e20a02212d9a1ef9eac9f..3d4d4ecce6ba9b8192ca21e27ef56fb3e6e53fa5 100644 (file)
@@ -335,7 +335,6 @@ class DateTest(AssertMixin):
         #x = db.text("select * from query_users_with_date where user_datetime=:date", bindparams=[bindparam('date', )]).execute(date=datetime.datetime(2005, 11, 10, 11, 52, 35)).fetchall()
         #print repr(x)
 
-    @testbase.unsupported('sqlite')
     def testdate2(self):
         t = Table('testdate', testbase.metadata, Column('id', Integer, primary_key=True),
                 Column('adate', Date), Column('adatetime', DateTime))