Fix: SQLAlchemy DetachedInstanceError in creative loading #776
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem:
When creating media buys, creative objects were being accessed after the database session closed, causing DetachedInstanceError when trying to read attributes like creative.data, creative.format, creative.name.
Root Cause:
SQLAlchemy lazy-loads attributes. When creative objects left the session context, their attributes became inaccessible. Subsequent access in loops triggered DetachedInstanceError.
Solution:
Eagerly load all required attributes into a plain Python dict immediately after querying, while still in session. Store dict instead of ORM object for reads. Keep ORM object reference only for database updates.
Changes:
Impact:
Testing:
Verified with Newton integration test - campaign creation now succeeds without DetachedInstanceError.
Resolves the 'creative not being properly bound to a session' error.