Problem
When using pydantic's dataclass class sqlalchemy mapper give an UnmappedInstanceError.
Implementation
# Create a simple user pydantic dataclass
from pydantic.dataclasses import dataclass
@dataclass
class User:
full_name: str
email: str
# Map sqlalchemy to the model above
import sqlalchemy as sa
from sqlalchemy.orm import mapper
import model
metadata = sa.MetaData()
user = sa.Table(
'user', metadata,
sa.Column("id", sa.Integer(), nullable=False, primary_key=True, autoincrement=True),
sa.Column("full_name", sa.String(), nullable=True),
)
user_mapper = mapper(model.User, user)
# Create Sqlalchemy session
from sqlalchemy.orm import sessionmaker
engine = create_engine(database_uri)
Session = sessionmaker(bind=engine)
session = Session()
# adding user from above into the session
user = User(full_name='Hey You', email='who@me.com')
session.add(user)
session.commit()
Error
sqlalchemy.orm.exc.UnmappedInstanceError: Class 'User' is mapped, but this instance lacks instrumentation. This occurs when the instance is created before sqlalchemy.orm.mapper(User) was called.
What in pydantic's dataclass causes this issue? Using python's base Dataclass doesn't cause an issue.