【发布时间】:2020-07-31 18:29:50
【问题描述】:
问题
当使用 pydantic 的数据类类 sqlalchemy 映射器时,给出一个UnmappedInstanceError。
实施
# 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()
错误
sqlalchemy.orm.exc.UnmappedInstanceError:类“用户”已映射,但此实例缺少检测。在调用 sqlalchemy.orm.mapper(User) 之前创建实例时会发生这种情况。
pydantic 的数据类中是什么导致了这个问题?使用 python 的基础 Dataclass 不会导致问题。
【问题讨论】:
-
您找到解决方案或原因了吗?
-
不,我最终改用了数据类。您可能想查看新的 SQLAlchemy 声明式映射。 docs.sqlalchemy.org/en/14/orm/…
标签: python-3.x sqlalchemy pydantic