假设我们想要创建一个博客系统,这个系统中最关键的部分就是博客内容,而这个内容则是归属于某个用户的博客。从数据库角度来看,这就是一个一对多的关系。一个用户,可以对应多个博客内容。
一对多的关系表创建如下:
class User(db.Model): id = db.Column( db.Integer, primary_key=True) name = db.Column( db.String( 50 ), unique = True ) email = db.Column( db.String( 120 ), unique = True ) password = db.Column( db.String( 120 ) ) blogs = db.relationship('Blog', backref = 'users', lazy = 'dynamic') def __init__( self, name, password, email ): self.name = name self.email = email self.password = password __tablename__ = 'users' def __repr( self ): return '<User %r>' % (self.name) class Blog(db.Model): id = db.Column( db.Integer, primary_key=True) title = db.Column( db.String( 100 ) ) text = db.Column( db.String( 1024 ) ) author = db.relationship("User", backref=db.backref('blog', order_by=id)) author_id = db.Column(db.Integer, db.ForeignKey('users.id')) def __init__( self, title, text, author ): self.title = title self.text = text #author = db.relation(User, innerjoin=True, lazy="joined") self.author = author __tablename__ = 'blogs' def __repr__( self ): return '<Blog %r author_id %d>' % (self.title, self.author_id)
ForeignKey的作用是将user的id和blog关联起来。此时的ForeignKey需要将user的主键和author_id关联起来。
relationship的作用是将User类和Blog类连接起来。