前言
课程中经常需要进行web开发,往往是采用Flask框架。建立数据库时就避免不了Flask-SQLAlchemy的使用,此文章将记录创建关系表的过程,方便日后回顾以及大家交流讨论。
一对一关系
下面的一对一关系以用户和身份证为例:
首先创建一个用户表:
class User(db.Model):
__tablename__= 'user'
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(200))
card = db.relationship('Card',uselist=False,backref=‘user’)
下面创建身份证表:
class Card(db.Model):
__tablename__= 'card'
id = db.Column(db.Integer,primary_key=True)
cardnum = db.Column(db.String(200))
user_id = db.Column(db.Integer,db.ForeignKey('user.id'))
关系很简单:一个用户对应一张身份证,一张身份证属于一个用户
Card表中添加了一个外键user_id, 通过db.ForeignKey(“user.id”)与主表绑定。User表中建立一个关系(relationship),有了此关系就可以通过user.card来找到用户对应的身份证的信息。而backref=‘user’表示反向的关系,即也可以通过card.user来找到此身份证对应的用户信息。一对一关系中,需要设置relationship中的uselist=Flase,这里是为了与多对多关系区分,暂且记住。具体区别为card.user由于没有使用uselist=False禁用列表,故生成的是一个列表,需要遍历才能获取信息。而user.card会直接返回信息。
重点是
card = db.relationship('Card',uselist=False,backref=‘user’)
这一指令,users和cards互相依存,均为属性。