summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-12-07 17:24:09 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2015-12-07 17:24:09 -0500
commit3f42743d6aa1326a80a0ed720a92266aa5fbf209 (patch)
tree8f67c6c50753df23e759fdfee73c79072260718d
parentd7eae8c95ca8c5963fc78fc997ed0f2da76aed31 (diff)
downloadsqlalchemy-3f42743d6aa1326a80a0ed720a92266aa5fbf209.tar.gz
- Fixed bug in MySQL reflection where the "fractional sections portion"
of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602
-rw-r--r--doc/build/changelog/changelog_10.rst11
-rw-r--r--lib/sqlalchemy/dialects/mysql/base.py5
-rw-r--r--test/dialect/mysql/test_reflection.py10
3 files changed, 24 insertions, 2 deletions
diff --git a/doc/build/changelog/changelog_10.rst b/doc/build/changelog/changelog_10.rst
index 6fc75b18b..3e7f6fd29 100644
--- a/doc/build/changelog/changelog_10.rst
+++ b/doc/build/changelog/changelog_10.rst
@@ -19,6 +19,17 @@
:version: 1.0.10
.. change::
+ :tags: bug, mysql
+ :tickets: 3602
+ :versions: 1.1.0b1
+
+ Fixed bug in MySQL reflection where the "fractional sections portion"
+ of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and
+ :class:`.mysql.TIME` types would be incorrectly placed into the
+ ``timestamp`` attribute, which is unused by MySQL, instead of the
+ ``fsp`` attribute.
+
+ .. change::
:tags: bug, orm
:tickets: 3599
:versions: 1.1.0b1
diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py
index ad3ffa6f8..988746403 100644
--- a/lib/sqlalchemy/dialects/mysql/base.py
+++ b/lib/sqlalchemy/dialects/mysql/base.py
@@ -3094,6 +3094,11 @@ class MySQLTableDefinitionParser(object):
# Column type keyword options
type_kw = {}
+
+ if issubclass(col_type, (DATETIME, TIME, TIMESTAMP)):
+ if type_args:
+ type_kw['fsp'] = type_args.pop(0)
+
for kw in ('unsigned', 'zerofill'):
if spec.get(kw, False):
type_kw[kw] = True
diff --git a/test/dialect/mysql/test_reflection.py b/test/dialect/mysql/test_reflection.py
index 024567828..09499fae4 100644
--- a/test/dialect/mysql/test_reflection.py
+++ b/test/dialect/mysql/test_reflection.py
@@ -72,8 +72,14 @@ class TypeReflectionTest(fixtures.TestBase):
specs = []
for type_ in (mysql.TIMESTAMP, mysql.DATETIME, mysql.TIME):
- typespec = type_()
- specs.append((typespec, typespec))
+ # MySQL defaults fsp to 0, and if 0 does not report it.
+ # we don't actually render 0 right now in DDL but even if we do,
+ # it comes back blank
+ for fsp in (None, 0, 5):
+ if fsp:
+ specs.append((type_(fsp=fsp), type_(fsp=fsp)))
+ else:
+ specs.append((type_(), type_()))
specs.extend([
(TIMESTAMP(), mysql.TIMESTAMP()),