diff options
| -rw-r--r-- | doc/build/changelog/unreleased_13/5045.rst | 7 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/mssql/pyodbc.py | 4 | ||||
| -rw-r--r-- | test/dialect/mssql/test_types.py | 2 |
3 files changed, 10 insertions, 3 deletions
diff --git a/doc/build/changelog/unreleased_13/5045.rst b/doc/build/changelog/unreleased_13/5045.rst new file mode 100644 index 000000000..020e723a0 --- /dev/null +++ b/doc/build/changelog/unreleased_13/5045.rst @@ -0,0 +1,7 @@ +.. change:: + :tags: bug, mssql + :tickets: 5045 + + Fixed issue where a timezone-aware ``datetime`` value being converted to + string for use as a parameter value of a :class:`.mssql.DATETIMEOFFSET` + column was omitting the fractional seconds. diff --git a/lib/sqlalchemy/dialects/mssql/pyodbc.py b/lib/sqlalchemy/dialects/mssql/pyodbc.py index 9ce6861c0..c3304a705 100644 --- a/lib/sqlalchemy/dialects/mssql/pyodbc.py +++ b/lib/sqlalchemy/dialects/mssql/pyodbc.py @@ -235,9 +235,9 @@ class _ODBCDateTimeOffset(DATETIMEOFFSET): def bind_processor(self, dialect): def process(value): """Convert to string format required by T-SQL.""" - dto_string = value.strftime("%Y-%m-%d %H:%M:%S %z") + dto_string = value.strftime("%Y-%m-%d %H:%M:%S.%f %z") # offset needs a colon, e.g., -0700 -> -07:00 - return dto_string[:23] + ":" + dto_string[23:] + return dto_string[:30] + ":" + dto_string[30:] return process diff --git a/test/dialect/mssql/test_types.py b/test/dialect/mssql/test_types.py index f837d3add..3cf9d9036 100644 --- a/test/dialect/mssql/test_types.py +++ b/test/dialect/mssql/test_types.py @@ -735,7 +735,7 @@ class TypeRoundTripTest( 11, 2, 32, - 0, + 123456, util.timezone(datetime.timedelta(hours=1)), ) t.insert().execute( |
