summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES4
-rw-r--r--lib/sqlalchemy/databases/sqlite.py21
-rw-r--r--test/sql/testtypes.py1
3 files changed, 19 insertions, 7 deletions
diff --git a/CHANGES b/CHANGES
index 62118dab1..ce3e86c2c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -22,6 +22,10 @@
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
diff --git a/lib/sqlalchemy/databases/sqlite.py b/lib/sqlalchemy/databases/sqlite.py
index 7c5cbccbe..aaaf55697 100644
--- a/lib/sqlalchemy/databases/sqlite.py
+++ b/lib/sqlalchemy/databases/sqlite.py
@@ -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):
diff --git a/test/sql/testtypes.py b/test/sql/testtypes.py
index 376546ee8..3d4d4ecce 100644
--- a/test/sql/testtypes.py
+++ b/test/sql/testtypes.py
@@ -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))