flask-模型(models)

1. 一对多 关系模型

1.1 关联方式
	1. 在 一 方 模型中 通过 relationship 函数从对象角度关联 多 方
		db.relationship('多方模型类名称',backref='反向应用名称')
	2. 在 多方 模型中 通过在 Column() 中设置 ForeignKey() 从数据库表角度设置外键,关联 一 方
		db.Column(db.Interger,db.ForeignKey("一方表名称.一方表主键"),nullable=False)
		返回的类属性名为 表中的外键名
from SQLAlchemyAPP.ext import db
# db是SQLAlchemy的实例化对象

class School(db.Model):   # "一方"
    __tablename__ = "schools"
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    name = db.Column(db.String(20),nullable=False)
    address = db.Column(db.String(50))
    students = db.relationship("Student",backref="univercity") # 关联学生模型,并设置反向引用名称

class Student(db.Model):   # "多方"
    __tablename__ = "students"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(20), nullable=False)
    age = db.Column(db.Integer)
    sex = db.Column(db.String(10))
    score = db.Column(db.Float)
    # 在多方从数据库层面关联一方
    school_id = db.Column(db.Integer,db.ForeignKey("schools.id"),nullable=False)
操作举例:
1. 添加 多 方记录
	1.1 通过外键关联 “一”方:
	eg: student1 = Student(name="张三",age=20,sex="男",school_id=1)
	1.2 通过反向引用名称关联“一”方:
	eg:  student2 = Student(name="李四",age=25,sex="男",university=school1)
	注:university是反向引用名称

2. 从“一”方查询“多”方
   2.1 通过“一”方模型中relationship()函数对应的类属性直接查询。
   			eg: 已知学校查询学生 school1.students
   
 3. 从“多”方查询“一”方
 	3.1 通过反向引用名称直接查询对应的“一”方实例对象
            eg: 已知学生查询学校  student3.university

2. 一对一 关系模型

	1. 在某一方:db.relationship('另一方模型类名称',backref='反向引用名
	    称',uselist=False)
	 2. 在维护关系的“一”方:db.Column(db.Integer,db.ForeignKey("另一方表名称.主
	     键"),nullable=False,unique=True)
# 被依赖的 一方
class Person(db.Model):
	__tablename__ = "person"
	id = db.Column(db.Integer,primary_key=True,autoincrement=True)
	name = db.Column(db.String(20),nullable=False)
	# uselist = False ,指定该类属性(card 类属性) 禁用列表结果
	card = db.relationship("Card",backref="per",uselist=False)
# 依赖的 一方
class Card(db.Model):
	__tablename__ = "cards"
	id = db.Column(db.Integer,primary_key=True,autoincrement=True)
	cardno = db.Column(db.String(20),unique=True)
	# 设置唯一外键
	person_id = db.Column(db.Integer,db.ForeignKey("person.id"),unique=True) 

3. 多对多 关系

1. 创建 db = SQLAlchemy()
2. db.Table() 创建中间关系表
3. 创建两个 多 方模型
# 实例化 db
db = SQLAlchemy()
# 中间关系表对应的代码
user_group = db.Table( "user_group_relation",
	db.Column("userid",db.Integer,db.ForeignKey("users.id"),primary_key=True),
	db.Column("groupid",db.Integer,db.ForeignKey("groups.id"),primary_key=True),
)

# 要户模型
class User(db.Model):
       __tablename__ = 'users'
       id = db.Column(db.Integer,primary_key=True)
       name = db.Column(db.String(20))
       ugroups = db.relationship("Group",secondary=user_group,backref=db.backref("gusers"))

# 组模型
class Group(db.Model):
       __tablename__ = 'groups'
       id = db.Column(db.Integer, primary_key=True)
       name = db.Column(db.String(20))
       
# 具体操作 添加两个用户
user1 = User(name="令狐冲")
user2 = User(name="郭靖")
user3 = User('黄蓉')
db.session.add(user1)
db.session.add(user2) 
db.session.add(user3)
db.session.commit()

# 添加三个组
group1 = Group(name="乒乓球组")
group2 = Group(name="喝酒组")
group3 = Group(name="读书组")
db.session.add(group1)
db.session.add(group2)
db.session.add(group3)
db.session.commit()

# 添加关联关系
user1.ugroups.append(group1)
user1.ugroups.append(group2)
db.session.commit()

user2.ugroups.append(group1)
user2.ugroups.append(group3)
db.session.commit()

# 也可以通过组,主动关联人
group3.gusers.append(user3)

# 用户关联多个组,也可以使用extend
user2.ugroups.extend([group1,group3])

# 查询user1加入的组名称:
 for g in user1.ugroups:
        print(g.name)
# 查询加入group1的用户姓名:
for u in group1.gusers:
        print(u.name) 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值