Python 烧瓶/炼金术关系

Python 烧瓶/炼金术关系,python,flask,flask-sqlalchemy,Python,Flask,Flask Sqlalchemy,所以我在读有关数据库关系的书,我似乎对此感到困惑 以下是米格尔·格林伯格在其著作中的代码 posts属性与Post模型有关系,但是posts属性变成了什么?田地?它能装什么? 那么backref是什么意思?它被定义为author,但在这两个模型中都没有author属性 我查看了文档,就像任何新手一样。我还是不太明白 那么TL:DR posts变成了什么 backref做什么?posts是一个列表,您可以在SQLAlchemy中作为抽象来访问它。SQLAlchemy将在您使用它时将其转换为适当的S

所以我在读有关数据库关系的书,我似乎对此感到困惑

以下是米格尔·格林伯格在其著作中的代码

posts
属性与
Post
模型有关系,但是
posts
属性变成了什么?田地?它能装什么? 那么
backref
是什么意思?它被定义为
author
,但在这两个
模型中都没有
author
属性

我查看了文档,就像任何新手一样。我还是不太明白

那么TL:DR

posts
变成了什么


backref
做什么?

posts
是一个列表,您可以在SQLAlchemy中作为抽象来访问它。SQLAlchemy将在您使用它时将其转换为适当的SQL查询 (表示有很多关系)


backref
-提示SQLAlchemy在
post
中指定属性,以指示它实际上属于特定的
用户。在这种情况下,这是一个错误(请查看博客底部的评论),应该是
user

,那么,在没有
posts=db.relationships的情况下,是否完全可以执行
user\u id=db.Column(db.Integer,db.ForeignKey('user.id'))
User.posts
如何知道哪些
posts
属于谁?你可以,但你失去了SQLAlchemy的威力(你实际上使用的是纯SQL)。创建一个Post对象。当您附加到user.posts时,SQLAlchemy会为您处理索引。推荐阅读
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')