一对多:
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.iduser_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). 根据用户查购买商品