-
Notifications
You must be signed in to change notification settings - Fork 102
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Data type for Float column should be float, not Decimal #178
Comments
bumping this case, as this is also causing problems for me. thx @KKawamura1 |
Also experiencing this |
A workaround to avoid resorting to any def func_that_uses_the_column() -> float:
foo = db.query(Foo).first()
return cast(float, foo.float_column) https://mypy.readthedocs.io/en/stable/casts.html#casts-and-type-assertions |
@wlcx I think the main problem is assigning from sqlalchemy import Float
class Coordinate(Base):
__tablename__ = 'coordinates'
latitude = Column(Float) #sqlalchemy-stub infers this column as Decimal
longitude = Column(Float)
coord = Coordinate(
latitude=50.5, #mypy complains that this value need to be Decimal
longitude=60.5,
)
from decimal import Decimal
coord_2= Coordinate(
latitude=Decimal(50.5), #works fine
longitude=Decimal(60.5),
) |
This problem also occurs when using only from sqlalchemy import Column, Float, Integer
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class MyModel(Base):
__tablename__ = "my_model"
id = Column(Integer, primary_key=True)
value = Column(Float, nullable=False)
def f(data: MyModel) -> None:
reveal_type(data.value) Expected output:
Actual output:
I'm currently using the following workaround: from typing import cast
from sqlalchemy import Float as Float_org
from sqlalchemy.sql.type_api import TypeEngine
Float = cast(type[TypeEngine[float]], Float_org) But it would be nice if this could be fixed in the stubs. |
Related to: #131
About
#132 fixed #131, a bug that
sqlalchemy.Numeric
was treated as float, notdecimal.Decimal
.But it may introduce a new bug, that
sqlalchemy.Float
is also treated asdecimal.Decimal
, not float.To reproduce
Assigning a float value to
sqlalchemy.Float
is enough to reproduce this bug.Below is a sample code to reproduce:
Expected result
Environment
The text was updated successfully, but these errors were encountered: