2015-01-23 8 views
0

Я только что начал изучать флягу и использовать пакет флакон-sqlalchemy. У меня есть схема, где роли (id, name) и пользователи (id, username, password, role_id) и role_id являются внешним ключом для role.id. От одного до многих отношений, поскольку одна роль может быть назначена для многих пользователей, но каждый пользователь будет иметь одну роль.SQLAlchemy отношения, когда использовать какие отношения?

В следующем коде,

class Role(db.Model): 
    # .. 
    users = db.relationship('User', backref='role') 

class User(db.Model): 
    # .. 
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id') 

Здесь я установил использование ROLE_ID, но зачем нам db.relationship? Что такое использование вариантов отношений и где использовать то, что:

  1. backref
  2. primaryjoin
  3. ленивый
  4. uselist
  5. order_by
  6. вторичный
  7. secondaryjoin

ответ

4

Ha ving db.relationship очень помогает в некоторых случаях и может помочь вам избежать длинных запросов.

Например

Без db.relationship:

role = ... # some role 
Session.query(User).filter_by(role_id=role.role_id).all() 

в сравнении с db.relationship:

role = ... # some role 
role.users 

Что касается вариантов отношений, наиболее полезные для вас, вероятно, backref. Он создает свойство обратной ссылки в модели пользователя. Например:

Вместо того чтобы делать это:

Session.query(Role).filter_by(role_id=user.role_id).first() 

Вы можете сделать это:

user.role 

Что касается остальных вариантов, я предлагаю читать official documentation, так как он является более информативным, чем я мог поместите здесь в ответ.

Смежные вопросы