by btdmaster on 3/24/25, 6:53 PM with 5 comments
Car:
Seats: [{ID: frontSeatId}, {ID: backSeatId}]
Driver: {'Name':'Joe', 'SalaryUSD': 42000}
SoundSystem:
{'TypeID': androidAutoId, Protocols: [{ID: radioProtocolId}, {ID: bluetoothProtocolId}]}
In this system, we often need to do partial updates, like:Car:
Driver: {'Name': 'Jack'}
SoundSystem:
{Protocols: [{ID: bluetoothProtocolId}]}
Meaning that the SoundSystemProtocols table should delete and create new entries such that the car only supports bluetooth, and the driver should get renamed from Joe to Jack.Is there an ORM that lets you do these partial updates atomically, without writing custom controllers for each Car-like object?
I want ergonomics over performance. I don't mind the language. Ideally it should allow a simple interface where the model defines the controller.
I've tried SQLModel, which promises this, but ended up with confusing JSON validation, mixing between SQLModel types and the internal SQLAlchemy model, and still had to write session.add(seats) by hand anyway.
If this doesn't exist for SQL, does another database support ID-as-value like this, where passing in an ID changes a reference, and passing in a value changes the value at that reference?
by jayknight on 3/24/25, 7:11 PM
https://docs.sqlalchemy.org/en/20/orm/session_transaction.ht...
It's the backing DBMS that will enforce atomicity. Postgres and sqlite allow the semantics of nested transactions with SAVEPOINTs (I don't know about other RDBMSes).
by btdmaster on 3/25/25, 3:53 PM
by malteg on 3/25/25, 12:43 AM