SQLAlchemy version 1.4.36 breaks SQLModel relationships
See original GitHub issueFirst Check
- I added a very descriptive title to this issue.
- I used the GitHub search to find a similar issue and didn’t find it.
- I searched the SQLModel documentation, with the integrated search.
- I already searched in Google “How to X in SQLModel” and didn’t find any information.
- I already read and followed all the tutorial in the docs and didn’t find an answer.
- I already checked if it is not related to SQLModel but to Pydantic.
- I already checked if it is not related to SQLModel but to SQLAlchemy.
👆 Not quite true - this is definitely related to SQLAlchemy!
Commit to Help
- I commit to help with one of those options 👆
Example Code
from typing import Optional
from sqlmodel import Field, Relationship, SQLModel
class City(SQLModel, table=True):
name: str = Field(primary_key=True)
heroes: "Hero" = Relationship(back_populates="city")
class Hero(SQLModel, table=True):
name: str = Field(primary_key=True)
city_name: Optional[str] = Field(default=None,foreign_key="city.name")
city: Optional[City] = Relationship(back_populates="heroes",
sa_relationship_kwargs=dict(cascade="all,delete")
)
if __name__ == "__main__":
gotham = City(name="Gotham")
batman = Hero(name="Batman", city=gotham)
assert batman.name == 'Batman' # This is fine
assert batman.city == gotham # This now breaks
Description
Our CI suddenly started failing, despite local SQLModel working fine. The issues turns out to be the transitive dependency on SQLAlchemy, which is weakly pinned: Github Actions pulled the latest version (1.4.36
) and most of our tests started failing.
https://github.com/sqlalchemy/sqlalchemy/releases/tag/rel_1_4_36
The problem seems to be related to how relationships are defined, but I haven’t yet dug into the SQLAlchemy changes enough to understand why that is.
I’m opening this issue chiefly to help anybody else who is confused by why suddenly their tests are failing. I’m happy to help fix it if it’s affecting others too.
For the time being we have just pinned SQLAlchemy==1.4.34
in our requirements.txt
.
Operating System
Linux, macOS
Operating System Details
Replicated locally and on Github Actions, both running in Docker
SQLModel Version
0.0.6
Python Version
3.9.10
Additional Context
We were previously running SQLAlchemy 1.4.34 locally and that works fine. Pinning to 1.4.36 breaks SQLModel.
Issue Analytics
- State:
- Created a year ago
- Reactions:65
- Comments:21 (7 by maintainers)
Thanks for the report @archydeberker! 🤓
And thanks for the discussion everyone! This was solved by @byrman in https://github.com/tiangolo/sqlmodel/pull/322.
It will be available in the next version, SQLModel
0.0.7
, released in the next hours. 🚀The issue remains with SQLAlchemy version 1.4.37