数据模型关系
一对多
如上所示,一个作者关联多个文章,暂时认定,一篇文章只能有一个作者。
作者以及文章的类定义如下所示:
class Author(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128), unique=True)
email = db.Column(db.String(128))
class Article(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(50), index=True)
description = db.Column(db.Text)
一对多的建立步骤
现在需要在数据库中,将作者和文章的关系关联成一对多的关系,具体操作如下:
-
定义外键
外键(
Foreign key
) 用来在B
表存储A
表的主键值,作为与A
表的关系字段。由于外键只能够存储单一数据,所以外键常在 “多” 的一侧定义,一个作者对应多个文章,因此需要在文章模型中添加作者的关系字段,记录作者的主键值,代码如下:
class Article(db.Model): ... author_id = db.Column(db.Integer, db.ForeignKey('author.id'))
-
定义关系属性
关系属性的定义主要是用来标记该类与那个类建立了关系,常常在 “一” 的一侧进行定义,关系属性能够返回多个记录,也称之为集合关系属性。
在作者和文章的关系中,就需要在作者一侧定义关系属性,代码如下:
class Author(db.Model): ... articles = db.relationship('Article')
-
创建表
# 我在这里是通过python直接创建表,因此使用了app.app_context()这个方法,这个方法主要是用来引入flask的各种方法,否则操作会产生报错 with app.app_context(): # 将所有的模型文件创建为表 db.create_all() # 删除数据库中所有的表 db.drop_all()
-
建立关系
建立关系这里指的是,将两张表的数据进行关系,主要有以下两种方式:外键字段赋值、关系属性赋值。
这里我们先准备几组数据,用来操作实现关系的建立。
from market import app,db from market.models import Author,Article author1 = Author(name='余华',email='yuhua@euansu.cn') author2 = Author(name='莫言',email='moyan@euansu.cn') author3 = Author(name='史铁生',email='shitiesheng@euansu.cn') article1 = Article(title='活着',description='活着') article2 = Article(title='许三观卖血记',description='许三观卖血记') article3 = Article(title='我与地坛',description='我与地坛') article4 = Article(title&