Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to select_related() in Flask/SQLAlchemy?

Having following models:

 class Question(db.Model):
   id = db.Column(db.Integer(), primary_key=True)
   title = db.Column(db.String(125))
   text = db.Column(db.Text())
   answers = db.relationship('Answer', backref='for_question')


class Answer(db.Model):
  id = db.Column(db.Integer(), primary_key=True)
  text = db.Column(db.Text())
  question_id = db.Column(db.Integer(), db.ForeignKey('question.id'))

How can I perform select_related in SQLAlchemy/Flask?

I've found in documentation that I can make something like

session.query(Question).options(joinedload(Question.aswers))

But I need first to get specific question by id and then select related to it

So I need something like this

Question.query.get(5).select_related()

Ho can I do this?

like image 732
micgeronimo Avatar asked Jan 16 '15 11:01

micgeronimo


1 Answers

answers = Question.query.options(joinedload(Question.answers)).get(5).answers

The expression Question.query.options(joinedload(Question.answers)).get(5) issues the query with a join and evaluates to a Question instance. Accessing answers attribute does not issue any queries.

You could also do it more explicitly

answers = Answer.query.filter_by(question_id=5).all()
like image 112
Bartosz Marcinkowski Avatar answered Sep 19 '22 20:09

Bartosz Marcinkowski