sqlalchemy2-stubs
sqlalchemy2-stubs copied to clipboard
Columns with `nullable=False` are typed as optional
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.
if you are using the mypy plugin, this is expected for the 1.4 series, see https://docs.sqlalchemy.org/en/14/orm/extensions/mypy.html#introspection-of-columns-based-on-typeengine
in 2.0 we will be using a completely different approach for this.
You are correct. Sorry for not reading the manual. You should probably close the issue now.
no worries at all , i will likely be switching this behavior for 2.0's approach (which won't use the plugin).