🐛 Fix RuntimeError: dictionary changed size during iteration in sqlmodel_update() (#997)

Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
This commit is contained in:
Bart Schuurmans
2025-12-23 17:23:54 +01:00
committed by GitHub
parent fb331e7ce7
commit 6cec19c8dc
2 changed files with 21 additions and 2 deletions

View File

@@ -1004,9 +1004,8 @@ class SQLModel(BaseModel, metaclass=SQLModelMetaclass, registry=default_registry
else:
value = getattr(obj, key)
setattr(self, key, value)
for remaining_key in use_update:
for remaining_key, value in use_update.items():
if remaining_key in get_model_fields(self):
value = use_update.pop(remaining_key)
setattr(self, remaining_key, value)
else:
raise ValueError(

20
tests/test_update.py Normal file
View File

@@ -0,0 +1,20 @@
from sqlmodel import Field, SQLModel
def test_sqlmodel_update():
class Organization(SQLModel, table=True):
id: int = Field(default=None, primary_key=True)
name: str
headquarters: str
class OrganizationUpdate(SQLModel):
name: str
org = Organization(name="Example Org", city="New York", headquarters="NYC HQ")
org_in = OrganizationUpdate(name="Updated org")
org.sqlmodel_update(
org_in,
update={
"headquarters": "-", # This field is in Organization, but not in OrganizationUpdate
},
)