python-3.x - 带有 SqlAlchemy Rasies UnmappedInstanceError 的 Pydantic 数据类
问题描述
问题
当使用 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 的基本数据类不会导致问题。
解决方案
这是 Pydantic 和 SQLAlchemy 之间的一个已知问题,无法修复。这个github 问题有更多细节。
来自 Pydantic 的创建者:
最好使用ORM模式。
我对 ORM 没有个人兴趣或支持它们——从长远来看,它们是一个错误,你最好只写 SQL。
但是,如果有一些简单的方法来支持需要对 pydantic 进行相对较小更改的映射器,我很乐意审查 PR。
——塞缪尔科尔文
推荐阅读
- javascript - 哨兵性能未收到事件js
- cobol - 如何修复排序程序?
- vb.net - 如何用鼠标滚动选择DataGridView的后排和后排?
- firebase - 是否可以破解和更新 Firebase 实时数据库数据
- postgresql - 关于postgres中数据类型相等比较问题的一个问题:操作符不存在错误
- c - openMP 的分段错误:带有 if 和 else 的单个 for 循环
- r - 来自 gtsummary 包的 Tbl_regression 用于负二项式回归
- tensorflow - TF Lite 多模型量化
- kubernetes - Kubernetes Ingress:发生内部错误:调用 webhook “validate.nginx.ingress.kubernetes.io”失败
- ruby-on-rails - Rails 跳过路径 id 中的 nil 值