Open ProgrammingStore opened 1 year ago
There are 2 ways to Child load with a selectin (or whatever type of lazy option): 1) Define the lazyload option in your model:
childs:List[Child]= sm.Relationship(
back_populates="parent",
sa_relationship_kwargs: {"lazyload": "selectin"},
)
Whenever you select Parent objects, the children will always be loaded.
2) At query time
If you want to be a bit more selective about when you do the selectin load, you can add it to the query:
from sqlalchemy.orm import selectinload
all_parents = session.exec(select(Parent).options(selectinload(Parent.childs)).all()
Pretty much anything you can do with the loads is described here:
https://docs.sqlalchemy.org/en/14/orm/loading_relationships.html
There are 2 ways to Child load with a selectin (or whatever type of lazy option):
- Define the lazyload option in your model:
childs:List[Child]= sm.Relationship( back_populates="parent", sa_relationship_kwargs: {"lazyload": "selectin"}, )
Whenever you select Parent objects, the children will always be loaded.
- At query time
If you want to be a bit more selective about when you do the selectin load, you can add it to the query:
from sqlalchemy.orm import selectinload all_parents = session.exec(select(Parent).options(selectinload(Parent.childs)).all()
Pretty much anything you can do with the loads is described here:
https://docs.sqlalchemy.org/en/14/orm/loading_relationships.html
Any way to use this without type errors? I'm getting this complaint when I use the selectinload
No overloads for "exec" match the provided argumentsPylance[reportCallIssue](https://github.com/microsoft/pyright/blob/main/docs/configuration.md#reportCallIssue)
session.py(50, 15): Overload 2 is the closest match
Argument of type "List[PersonaTrait]" cannot be assigned to parameter "keys" of type "_AttrType" in function "selectinload"
Type "List[PersonaTrait]" is incompatible with type "_AttrType"
"List[PersonaTrait]" is incompatible with "QueryableAttribute[Any]"
"List[PersonaTrait]" is incompatible with type "Literal['*']"Pylance[reportArgumentType](https://github.com/microsoft/pyright/blob/main/docs/configuration.md#reportArgumentType)
In version 0.0.21
Passing lazy
instead of lazyload
worked for me.
childs:List[Child]= sm.Relationship(
back_populates="parent",
sa_relationship_kwargs: {"lazy": "selectin"}, # lazy instead of lazyload
)
First Check
Commit to Help
Example Code
Description
What i want to get from pydantic response schema ? I want to get a query with select lazy options, using the schema of response, because this information already contains in relationships of pydantic models. For example: select(Parent).options(selectinload(Parent.Childs)),
The existance of property in pydantic model gives information about the need to use selectinload. Is there any solutions for it?
Operating System
Linux
Operating System Details
any
SQLModel Version
any
Python Version
any
Additional Context
any