Skip to content

Instantly share code, notes, and snippets.

@inklesspen
Created November 27, 2016 04:43
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save inklesspen/d9d3cad9be0b77f0c5b7e376f9954a97 to your computer and use it in GitHub Desktop.
Save inklesspen/d9d3cad9be0b77f0c5b7e376f9954a97 to your computer and use it in GitHub Desktop.
from sqlalchemy import inspect
from sqlalchemy.orm import joinedload
def reload_eagerly(obj, *rels):
state = inspect(obj)
if not state.persistent:
raise ValueError("reload_eagerly can only be used on persistent objects")
query = state.session.query(state.mapper).filter(*[col == val for col, val in zip(state.mapper.primary_key, state.identity)])
for rel in rels:
if rel in state.mapper.all_orm_descriptors:
rel = state.mapper.all_orm_descriptors[rel]
query = query.options(joinedload(rel))
return query
# Usage
reload_eagerly(myuser, User.emails, User.friends).one()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment