数据库中外键知识

class Tweet(db.Model):
tablename = ‘tweets’

user_id = db.Column(db.Integer, db.ForeignKey(‘users.id’))

class User(db.Model):
tablename = ‘users’

tweets = db.relationship(‘Tweet’, backref=’user’)

定义两个类,一个推特有一个发推特的用户,一个用户会发多个推特,所以要把推特和用户关联起来。

推特类的模型设计:
推特需要知道是谁发的,所以定义一个user_id字段,用来保存user的id,这个字段就是外键,用来关联推特类和用户类
传给db.ForeignKey()的 ‘users.id’ 参数,就是表示user_id这个字段为user.id的值,通过user_id就可以查询这是由哪个id发的推特。

用户类的模型设计:
tweets = db.relationship(‘Tweet’, backref=’user’)
relationship表明它不是一个字段,而是User类的一个属性,user类表中没有tweets这个字段,db.relationship()中第一个参数 ‘Tweets’ 是类名,表示关系的另一端是Tweets类,对于一个User类的实例(某一个用户),调用tweets属性,将根据该用户的ID(对应tweets类里面的user_id字段)查询并返回所有推特。
db.relationship() 中的 backref 反向应用表示向Tweet类模型添加一个user属性,来实现反向引用,这一属性和 user_id 都可以访问 User 模型, 不同的是前者获取的是类模型实例对象, 而后者获取的是外键的值。

假设:
u = User()
t = Tweet()
u 的 username 是 ‘xd’ , u 的 id 是 3
用户’xd’ 发了10条推特
t 是 ‘xd’ 发的第5条推特, 内容是’666’

那么:
u.tweets 将以列表形式返回用户 ‘xd’ 的10条推特

t.content 将返回 '666'
t.user_id 将返回这条推特的用户的 id 也就是3, 但并不知道发推用户的名字
t.user 将返回这条推特的用户实例 u, t.user.username 就可以获得用户的名字
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值