Support hybrid_property, column_property, declared_attr#801
Support hybrid_property, column_property, declared_attr#80150Bytes-dev wants to merge 66 commits intofastapi:mainfrom
Conversation
50Bytes-dev
commented
Feb 14, 2024
class Item(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
value: float
hero_id: int = Field(foreign_key="hero.id")
hero: "Hero" = Relationship(back_populates="items")
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
items: List[Item] = Relationship(back_populates="hero")
@declared_attr
def total_items(cls):
return column_property(cls._total_items_expression())
@classmethod
def _total_items_expression(cls):
return (
select(func.coalesce(func.sum(Item.value), 0))
.where(Item.hero_id == cls.id)
.correlate_except(Item)
.label("total_items")
)
@declared_attr
def status(cls):
return column_property(
select(
case(
(cls._total_items_expression() > 0, "active"), else_="inactive"
)
).scalar_subquery()
) |
Co-authored-by: Arthur Woimbée <[email protected]>
Co-authored-by: Arthur Woimbée <[email protected]>
Co-authored-by: Arthur Woimbée <[email protected]>
|
Please merge it asap :3. I need it, lol. |
|
hey can we get this merged in |
|
@tiangolo Could you please take a look at this MR. The functionality is very nice. Would be a nice addition. Doesn't seem to clash with overall design |
Following this example I am getting Even if I do But I think we can get the same result with |
|
Any movement to get this functionality in? |
This repository has long been abandoned, which is why I made a fork and am adding needed functionality there |
…enhance association proxy handling
…perties and enhance setter handling
…s for fallback behavior
…fallback values in deferred properties; add comprehensive tests for async scenarios and edge cases
…d tests to verify fallback behavior after refresh and loading
…y; add basic tests for fallback behavior and undefer functionality
… typing tests for compatibility
|
any updates on this? |
|
This pull request has a merge conflict that needs to be resolved. |
|
I think I can go a bit further than what this pr had in mind. I was thinking about combining computed_feilds and hybrid_property column_property and declared_attr together. Does anyone have any tips and suggestions? I'll try and use what this pr had in mind as a blueprint. |
…configuration and utility functions for SQLModel
|
@50Bytes-dev Glad to see your pr is still alive, mind if I help you review it? |
…columns by schema; update col function to return InstrumentedAttribute for better type safety
… relations in SQLModel
…Path and AliasChoices for enhanced flexibility
|
@50Bytes-dev Have you tried adding some tests to the pytest to ensure that this implementation works? |
Yes, I have basic tests. I use this PR in the production of my projects and make sure that everything works correctly. |
|
@50Bytes-dev thanks, for that piece of code. Is there any chance for release some time soon. I have a use case starting from next week and I'd like to omit a vanilla sqlalchemy workaround :) |
Release where? Personally, I just use the repository and don't plan to release anything anywhere. I recommend trying it this way too, it's quite convenient. dependencies = [
"sqlmodel",
]
[tool.uv.sources]
sqlmodel = { git = "https://github.com/50Bytes-dev/sqlmodel.git", rev = "833b8700e5006177d1a57fd8b3109bd625a358de" } |
|
@50Bytes-dev Okay, sorry. I thought that the PR is meant to be merged at some point. |
I think that the main repository is dead and unlikely to be developed further, so I created my own fork where I implement all the necessary functions myself. |
…eAttribute for better type safety
The main repo of what? FastAPI, SQLmodel? If there is no PR, in SQLModel I assume, nobody can check it, thus it appears obv. dead. Though if you look at the commit history in main, all is fine Looking for a method to introduce calculated column easily. Got to this to just read that lol |