Skip to content

Assigning to a Union of a nullable and non-nullable column fails #240

Description

@Garrett-R

I'm running the latest (at the time of writing) mypy (0.950) and sqlalchemy-stubs (0.4) and hitting this issue:

from sqlalchemy import Column, Integer
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()


class Dog(Base):
    __tablename__ = 'dogs'

    age = Column(Integer)


class Cat(Base):
    __tablename__ = 'cats'

    age = Column(Integer, nullable=False)


Animal = Dog | Cat

animal: Animal = Cat()

animal.age = 20  # Mypy error, should be fine!

The error I get is:

error: Incompatible types in assignment (expression has type "int", variable has type "Union[Column[Optional[int]], Column[int]]")

but I don't think there should be an error.

My mypy config in my pyproject.toml is just:

[tool.mypy]
plugins = "sqlmypy"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions