diff options
Diffstat (limited to 'lib/sqlalchemy/databases/mssql.py')
-rw-r--r-- | lib/sqlalchemy/databases/mssql.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/sqlalchemy/databases/mssql.py b/lib/sqlalchemy/databases/mssql.py index 6b1b41123..81536aab1 100644 --- a/lib/sqlalchemy/databases/mssql.py +++ b/lib/sqlalchemy/databases/mssql.py @@ -103,6 +103,29 @@ class MSDate(sqltypes.Date): def get_col_spec(self): return "SMALLDATETIME" +class MSTime(sqltypes.Time): + __zero_date = datetime.date(1900, 1, 1) + + def __init__(self, *a, **kw): + super(MSTime, self).__init__(False) + + def get_col_spec(self): + return "DATETIME" + + def convert_bind_param(self, value, dialect): + if isinstance(value, datetime.datetime): + value = datetime.datetime.combine(self.__zero_date, value.time()) + elif isinstance(value, datetime.time): + value = datetime.datetime.combine(self.__zero_date, value) + return value + + def convert_result_value(self, value, dialect): + if isinstance(value, datetime.datetime): + return value.time() + elif isinstance(value, datetime.date): + return datetime.time(0, 0, 0) + return value + class MSDateTime_adodbapi(MSDateTime): def convert_result_value(self, value, dialect): # adodbapi will return datetimes with empty time values as datetime.date() objects. @@ -310,6 +333,7 @@ class MSSQLDialect(ansisql.ANSIDialect): sqltypes.Float : MSFloat, sqltypes.DateTime : MSDateTime, sqltypes.Date : MSDate, + sqltypes.Time : MSTime, sqltypes.String : MSString, sqltypes.Binary : MSBinary, sqltypes.Boolean : MSBoolean, @@ -914,3 +938,4 @@ dialect = MSSQLDialect + |