Skip to content

Columns with nullable=False are typed as optional #198

Open
@peteris-zealid

Description

@peteris-zealid

Describe the bug
Table columns have optional[T] type even when they are defined with nullable=False

Expected behavior
Expected for type to be just "builtins.str" (not optional)

To Reproduce

# Most of this is copy pasted from documentation
from sqlalchemy import Column
from sqlalchemy import Integer
from sqlalchemy import String
from sqlalchemy import select
from sqlalchemy.orm import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'user'

    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)  #  <------------ Added nullable=False here

some_user = User(id=5, name='user')

reveal_type(some_user.name)  # <-------- Revealed type is "Union[builtins.str, None]" 

# Expected for type to be just "builtins.str" (not optional)

Versions.

  • OS:
  • Python: 3.8.9
  • SQLAlchemy: 1.4.27
  • mypy: 0.910
  • SQLAlchemy2-stubs: 0.0.2a19

Have a nice day!
Thank you, you too. You do not see this a lot on the internet. Really appreciate it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    expected behaviorthat's how it's meant to work. consider the "documentation" label in additionquestionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions