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')