英文:
How to pre-load data from related field in sqlalchemy + pydantic?
问题
我有这样的表格
```python
class Address(Base):
event_id: Mapped[int] = mapped_column(
sa.Integer,
sa.ForeignKey('events.id'),
nullable=False
)
event = relationship(
'Event',
back_populates='address',
uselist=False
)
class Event(Base):
address = relationship(
'Address',
uselist=False,
back_populates='event',
)
然后我创建事件如下:event = Event(**data), session.add(event), session.commit()
所以当我尝试EventSchema.from_orm(event_instance)
时,
我得到错误,提示“值不是有效的字典(类型错误.dict)”
以下是我的EventSchema:
class AddressSchema(BaseModel):
country: str
city: str
street: str
build: str
class EventSchema(BaseModel):
address: Optional[AddressSchema] = Field(...)
那么,我如何预加载数据以避免此错误?
我希望得到如下响应:
{"id": 1, "address": {"country": "foocountry", "street": "foostreet"}}
英文:
I have such tables
class Address(Base):
event_id: Mapped[int] = mapped_column(
sa.Integer,
sa.ForeignKey('events.id'),
nullable=False
)
event = relationship(
'Event',
back_populates='address',
uselist=False
)
class Event(Base):
address = relationship(
'Address',
uselist=False,
back_populates='event',
)
And I create event like event = Event(**data), session.add(event), session.commit()
So when I try to EventSchema.from_orm(event_instance)
then I got error, that value is not a valid dict (type=type_error.dict)
Here is my EventSchema:
class AddressSchema(BaseModel):
country: str
city: str
street: str
build: str
class EventSchema(BaseModel):
address: Optional[AddressSchema] = Field(...)
So, how I can pre-load data, to avoid this error?
I`d like to get such response:
{"id": 1, "address": {"country": "foocountry", "street": "foostreet"}
</details>
# 答案1
**得分**: 0
解决方案是为AdressSchema添加`orm_mode = True`。
<details>
<summary>英文:</summary>
The solution was to add an `orm_mode = True` for AdressSchema
</details>
# 答案2
**得分**: 0
你的`Address`模型没有像国家、城市等字段。请更新你的模型和架构:
```python
import sqlalchemy as sa
import sqlalchemy.orm as so
class Event(Base):
address_id: so.Mapped[int] = so.mapped_column(
sa.ForeignKey("address.id", ondelete="SET NULL"), nullable=True
)
address: so.Mapped[Address] = so.relationship(
back_populates='event', lazy="selectin"
)
class EventSchema(BaseModel):
address: Optional[AddressSchema] = None
class Config:
orm_mode = True
英文:
Your Address
model doesn't have fields like country, city etc. Update your models and schema:
import sqlalchemy as sa
import sqlalchemy.orm as so
class Event(Base):
address_id: so.Mapped[int] = so.mapped_column(
sa.ForeignKey("address.id", ondelete="SET NULL"), nullable=True
)
address: so.Mapped[Address] = so.relationship(
back_populates='event', lazy="selectin"
)
class EventSchema(BaseModel):
address: Optional[AddressSchema] = None
class Config:
orm_mode = True
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论