一对多:
1. 在多的表里定义外键 db.ForeignKey('主键')
2. 增加字段 db.relationship 建立联系 ("关联表类名","反向引用名")
from ext import db
# 一
class User(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(15), nullable=False)
password = db.Column(db.String(64), nullable=False)
# 代码层次: 最后创建,这句不需要迁移;只要建立外键,就需要加relationship
# 写在 一表 或者 多表 里都可以,只要是以下格式即可
# db.relationship("关联表" , "反向引用:外键引用主键时的名称")
articles = db.relationship("Article", backref='user')
# 多
class Article(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(50), nullable=False)
#
# db.ForeignKey('user.id') : 定义外键;关联主键的id,类名在数据库中显示为小写user--> user.id
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
"""
python app.py db init # 产生一个文件夹 migrations,只需执行一次
python app.py db migrate # 迁移: 自动生成一个版本文件,在migrations/version生成一个.py文件
python app.py db upgrade # 同步: 生成数据库表
"""
多对多:
1. 定义模型 和 中间表
2. app.py 引入 模型
3. 执行指令 生成模型
from ext import db
# 用户表
class User(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(15), nullable=False)
password = db.Column(db.String(64), nullable=False)
isdelete = db.Column(db.Boolean,default=False)
# 商品表
class Goods(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
gname = db.Column(db.String(100), nullable=False)
price = db.Column(db.Float, nullable=False)
# relationship:需要定义外键才能使用,本表中没定义,
# 可以指定关联的表:secondary='user_goods'
# 这句不需要迁移
user = db.relationship('User', backref='goodslist', secondary='user_goods')
# 中间表
# 第一种(不推荐)
# tags = db.Table('user_goods',
# db.Column('user_id', db.Integer, db.ForeignKey("user.id")),
# db.Column('goods_id', db.Integer, db.ForeignKey("goods.id")),
# db.Column("number",db.Inteter,default=1)
# )
# 第二种(推荐)
# 关系表: user与 goods之间的关系
class User_goods(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
# 关联 用户 主键
user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
# 关联 商品 主键
goods_id = db.Column(db.Integer, db.ForeignKey("goods.id"))
number = db.Column(db.Integer, default=1)
"""
python app.py db init # 产生一个文件夹 migrations,只需执行一次
python app.py db migrate # 迁移: 自动生成一个版本文件,在migrations/version生成一个.py文件
python app.py db upgrade # 同步: 生成数据库表
"""
代码实例:
(1). 首页展示
(2). 根据商品查看购买人
(3). 根据用户查购买商品