summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2017-06-26 16:50:24 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2017-06-26 16:50:24 -0400
commit563180f7d46b24bd334d227104c90bf8cdb81158 (patch)
treee4423138b130b9fc248e2bae3a3cd0cca5771a59 /lib/sqlalchemy
parent33d083c0347ccfb80fa546b0a580035ac7c48983 (diff)
downloadsqlalchemy-563180f7d46b24bd334d227104c90bf8cdb81158.tar.gz
Coerce to float for Float with all native decimal backends
The result processor for the :class:`.Float` type now unconditionally runs values through the ``float()`` processor if the dialect specifies that it also supports "native decimal" mode. While most backends will deliver Python ``float`` objects for a floating point datatype, the MySQL backends in some cases lack the typing information in order to provide this and return ``Decimal`` unless the float conversion is done. Change-Id: I638f1480fb00a507036efaf0e0080f26893d98ad Fixes: #4020
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/sql/sqltypes.py2
-rw-r--r--lib/sqlalchemy/testing/suite/test_types.py1
2 files changed, 2 insertions, 1 deletions
diff --git a/lib/sqlalchemy/sql/sqltypes.py b/lib/sqlalchemy/sql/sqltypes.py
index 5b53f390e..6838baa5f 100644
--- a/lib/sqlalchemy/sql/sqltypes.py
+++ b/lib/sqlalchemy/sql/sqltypes.py
@@ -702,6 +702,8 @@ class Float(Numeric):
return processors.to_decimal_processor_factory(
decimal.Decimal,
self._effective_decimal_return_scale)
+ elif dialect.supports_native_decimal:
+ return processors.to_float
else:
return None
diff --git a/lib/sqlalchemy/testing/suite/test_types.py b/lib/sqlalchemy/testing/suite/test_types.py
index de32e77a4..a345454be 100644
--- a/lib/sqlalchemy/testing/suite/test_types.py
+++ b/lib/sqlalchemy/testing/suite/test_types.py
@@ -431,7 +431,6 @@ class NumericTest(_LiteralRoundTripFixture, fixtures.TestBase):
filter_=lambda n: n is not None and round(n, 5) or None
)
- @testing.fails_on("mysql", "until we do #4020")
def test_float_coerce_round_trip(self):
expr = 15.7563