From e16bfad40756e76bf4622eaeb005983a4300f32e Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 12 Oct 2006 01:12:17 +0000 Subject: [PATCH] - fixes to Date/Time (SLDate/SLTime) types; works as good as postgres now [ticket:335] --- CHANGES | 2 ++ lib/sqlalchemy/databases/sqlite.py | 9 +++++---- test/sql/testtypes.py | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index 927f9c0959..eb5f10f3da 100644 --- a/CHANGES +++ b/CHANGES @@ -13,6 +13,8 @@ - Specific Databases: - SQLite: - sqlite boolean datatype converts False/True to 0/1 by default + - fixes to Date/Time (SLDate/SLTime) types; works as good as postgres + now [ticket:335] - MS-SQL: - fixes bug 261 (table reflection broken for MS-SQL case-sensitive databases) diff --git a/lib/sqlalchemy/databases/sqlite.py b/lib/sqlalchemy/databases/sqlite.py index 378ec7cd90..3868f255f3 100644 --- a/lib/sqlalchemy/databases/sqlite.py +++ b/lib/sqlalchemy/databases/sqlite.py @@ -51,24 +51,24 @@ class DateTimeMixin(object): (value, microsecond) = (value, 0) return time.strptime(value, fmt)[0:6] + (microsecond,) -class SLDateTime(sqltypes.DateTime, DateTimeMixin): +class SLDateTime(DateTimeMixin,sqltypes.DateTime): 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") return tup and datetime.datetime(*tup) -class SLDate(sqltypes.Date, DateTimeMixin): +class SLDate(DateTimeMixin, sqltypes.Date): def get_col_spec(self): return "DATE" def convert_result_value(self, value, dialect): tup = self._cvt(value, dialect, "%Y-%m-%d") return tup and datetime.date(*tup[0:3]) -class SLTime(sqltypes.Time, DateTimeMixin): +class SLTime(DateTimeMixin, sqltypes.Time): def get_col_spec(self): return "TIME" def convert_result_value(self, value, dialect): tup = self._cvt(value, dialect, "%H:%M:%S") - return tup and datetime.time(*tup[4:7]) + return tup and datetime.time(*tup[3:7]) class SLText(sqltypes.TEXT): def get_col_spec(self): return "TEXT" @@ -98,6 +98,7 @@ colspecs = { sqltypes.Float : SLNumeric, sqltypes.DateTime : SLDateTime, sqltypes.Date : SLDate, + sqltypes.Time : SLTime, sqltypes.String : SLString, sqltypes.Binary : SLBinary, sqltypes.Boolean : SLBoolean, diff --git a/test/sql/testtypes.py b/test/sql/testtypes.py index 9158f6a2c7..e08bdb89f1 100644 --- a/test/sql/testtypes.py +++ b/test/sql/testtypes.py @@ -241,7 +241,7 @@ class DateTest(AssertMixin): collist = [Column('user_id', INT, primary_key = True), Column('user_name', VARCHAR(20)), Column('user_datetime', DateTime), Column('user_date', DateTime)] - elif db.engine.name == 'mysql' or db.engine.name == 'mssql' or db.engine.name == 'sqlite': + elif db.engine.name == 'mysql' or db.engine.name == 'mssql': # these dont really support the TIME type at all insert_data = [ [7, 'jack', datetime.datetime(2005, 11, 10, 0, 0), datetime.datetime(2005, 11, 10, 0, 0, 0)], -- 2.47.2