ORM对象关系映射简单介绍和参数形式报错解决

1. 什么是 ORM(对象关系映射)

ORM(Object Relational Mapping)是一种编程技术,它允许开发人员使用面向对象的方式来操作关系型数据库。在传统的数据库操作中,我们需要编写 SQL 语句来进行数据的增删改查。而使用 ORM 后,我们可以通过操作对象来间接操作数据库,将对象的属性和方法映射到数据库的表、列和操作上。

例如,在 Python 中常见的 ORM 库有 SQLAlchemy 和 Django ORM。以下是一个使用 SQLAlchemy 定义一个简单用户模型的示例:

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

在这个示例中,User 类就是一个 ORM 模型,它对应数据库中的 users 表,idnameemail 是表中的列。

2. ORM 模型的数据存储方式

ORM 模型通常将数据库中的数据存储在对象的属性中。当我们从数据库中查询数据时,ORM 会将查询结果封装成对象,数据存储在对象的属性里。例如:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine('sqlite:///test.db')
Session = sessionmaker(bind=engine)
session = Session()

# 查询一个用户
user = session.query(User).filter_by(id=1).first()

# 数据存储在对象的属性中
print(user.name)  # 访问用户的姓名
print(user.email) # 访问用户的邮箱

在这个示例中,user 是一个 User 对象,数据库中的数据被存储在 user 对象的 nameemail 属性中。

3. from_attributes=True 在处理 ORM 模型时的作用

当我们使用 Pydantic 模型来验证和处理从 ORM 模型获取的数据时,from_attributes=True 配置就非常有用了。

不使用 from_attributes=True 的情况

如果没有设置 from_attributes=True,Pydantic 模型默认期望传入的数据是字典形式。例如:

from pydantic import BaseModel

class UserModel(BaseModel):
    id: int
    name: str
    email: str

# 尝试使用 ORM 对象初始化 Pydantic 模型
try:
    user_model = UserModel(user)  # 这里会报错
except Exception as e:
    print(f"Error: {e}")

在这个示例中,直接将 user(ORM 对象)传递给 UserModel 会引发错误,因为 Pydantic 模型期望的是字典形式的数据。

使用 from_attributes=True 的情况

当我们设置 from_attributes=True 时,Pydantic 模型会尝试从对象的属性中提取数据。例如:

from pydantic import BaseModel, ConfigDict

class UserModel(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: int
    name: str
    email: str

# 使用 ORM 对象初始化 Pydantic 模型
user_model = UserModel.model_validate(user)
print(user_model)

在这个示例中,由于设置了 from_attributes=TrueUserModel 可以直接从 user 对象的属性中提取数据,从而成功创建 UserModel 实例。

总结

from_attributes=True 配置使得 Pydantic 模型能够方便地处理从 ORM 模型获取的数据,避免了手动将 ORM 对象转换为字典的繁琐过程,提高了代码的简洁性和可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值