Skip to content

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

@Garrett-R

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions