2015-08-03 7 views
0

Так что я читал об отношениях базы данных, и я, кажется, озадачен этимколб/SQLAlchemy Отношения

Ниже приведен код Мигеля Гринберг в своем blog

from app import db 

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    nickname = db.Column(db.String(64), index=True, unique=True) 
    email = db.Column(db.String(120), index=True, unique=True) 
    posts = db.relationship('Post', backref='author', lazy='dynamic') 

    def __repr__(self): 
     return '<User %r>' % (self.nickname) 

class Post(db.Model): 
    id = db.Column(db.Integer, primary_key = True) 
    body = db.Column(db.String(140)) 
    timestamp = db.Column(db.DateTime) 
    user_id = db.Column(db.Integer, db.ForeignKey('user.id')) 

    def __repr__(self): 
     return '<Post %r>' % (self.body) 

поправьте меня, если я понимаю неправильно

posts = db.relationship('Post', backref='author', lazy='dynamic') 

атрибут posts будет иметь отношения к Post модели, но то, что делает posts атрибут стать? поле? что он может содержать? и что означает backref означает? он определяется как author, но нет author атрибута ни в Models.

Я просмотрел документы и так же, как и любой newb. Я все еще не совсем понимаю.

так TL: DR

что делает posts стать?

какой backref сделать?

ответ

1

posts - это список, который вы можете использовать в качестве абстракции в SQLAlchemy для доступа. SQLAlchemy будет переводить его на соответствующий запрос SQL, когда вы используете его (это указывает на есть много-связь)

backref - намекает SQLAlchemy, что свойство в post, чтобы указать, что он на самом деле принадлежит к определенному User. В этом случае это ошибка (посмотрите на комментарии в нижней части блога) и должен быть user

+0

, так что все это можно сделать 'user_id = db.Column (db.Integer, db.ForeignKey ('user .id ')) 'без' posts = db.relationships'? Как «User.posts» знает, какие «посты» принадлежат кому? – Zion

+0

Вы можете, но вы теряете силу SQLAlchemy (вы на самом деле используете простой SQL). Вы создаете объект Post. Когда вы присоединяетесь к user.posts, SQLAlchemy обрабатывает вам индексы. рекомендуемое чтение http://docs.sqlalchemy.org/en/rel_1_0/orm/basic_relationships.html#one-to-many – Boaz

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