One thing this leaves out is the danger of concurrency issues, which can sometimes be worsened by using an ORM. Writing correct, race-free SQL can be very hard (with READ COMMITTED transactions) or require complex retry logic (with SERIALIZABLE). Preventing deadlocks can also be a concern.
ORMs tend to hide the underlying SQL operations, making it even harder to verify whether operations are concurrency safe.
ORMs tend to hide the underlying SQL operations, making it even harder to verify whether operations are concurrency safe.