资讯专栏INFORMATION COLUMN

SQLAIchemy数据模型关联

honhon / 2887人阅读

摘要:以下为读深入理解使用要建立相应的数据模型而实际中模型之间又有一些不同的关系比如一一对应,一对多个,多对多个模型之间建立关系便必不可少了用户表示例图片表示例第一张图片第二张图片第三张图片标签表示例人物风景动物约束表示例一对一这种关联似乎很少用

以下为读《深入理解Flask》

使用SQLAIchemy要建立相应的数据模型
而实际中模型之间又有一些不同的关系

比如一一对应,一对多个,多对多个
模型之间建立关系便必不可少了
用户表示例
ID Username Password UserAvator Email
1 bayi 123456 upload/avator1jpg 15157@qq.com
2 babai 123654 upload/avator2.jpg 123456@qq.com
3 xiaoming 654321 upload/avator3.jpg 123654@qq.com
图片表示例
ID user_id description Arddess
1 1 第一张图片 upload/1.jpg
2 1 第二张图片 upload/2.jpg
3 3 第三张图片 upload/3.jpg
标签表示例
ID tag
1 人物
2 风景
3 动物
约束表示例
ID 1 ID 2 ID 3
pic_id 1 pic_id 2 pic_id 1
tag_id 1 tag_id 1 tag_id 2
一对一
这种关联似乎很少用到,夫妻似乎是很好的生活模型
可以在丈夫一方加上外键,并加上唯一参数
class husband(db.Model):
    __tablename__ = "husband"
    id = db.Column(db.Integer, primary_key=True)
    husbandname = db.Column(db.String(80), unique=True)
    wife = db.relationship("wife", backref="husband", lazy="dynamic",unique=True)
在妻子一方加上指向husband的值
class wife(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    wifename = db.Column(db.String(80), unique=True)
    husbandId = db.Column(db.Integer, db.ForeignKey("husband.id"))
一对多
这个关系算是常用的了,这次的demo里也有这个:user->picture
一个用户会上传多张图片,相当于把一对一里的唯一参数删去
user.pictures就成了一个列表
class User(db.Model):
    __tablename__ = "User"
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    password= db.Column(db.String(128))
    avator= db.Column(db.String(35), unique=True)
    email = db.Column(db.String(120), unique=True,index=True)
    picture = db.relationship("Picture", backref="user", lazy="dynamic")

class Picture(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    dsepriction= db.Column(db.String(5000), unique=True)
    address= db.Column(db.String(35), unique=True)
    userId = db.Column(db.Integer, db.ForeignKey("User.id"))
多对多
比如这次用到的图片->标签
多对多的建立就需要一个约束表的存在
#约束表
relation = db.Table("relation",
    db.Column("tags_id", db.Integer, db.ForeignKey("tags.id"),primary_key=True),
    db.Column("picture_id", db.Integer, db.ForeignKey("picture.id"),primary_key=True)
)

class Picture(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    dsepriction= db.Column(db.String(5000), unique=True)
    address= db.Column(db.String(35), unique=True)
    userId = db.Column(db.Integer, db.ForeignKey("User.id"))
    tags = db.relationship(
        "Tags", secondary=relation,backref=db.backref("picture", lazy="dynamic"))

class Tags(db.Model):
    id = db .Column(db.Integer, primary_key=True)
    tag = db.Column(db.String(50))
多对多关系一开始写就感觉对操作方面很迷,就实际操作了一下
实际操作一下可以体会一下他的这种用法
C:UsersayiDesktopirides (master)
(venv) λ python manage.py shell
>>> pic=picture.query.filter_by(id=2).first()
>>> pic

>>> tag1=tags.query.first()
>>> tag1

>>> tag2=tags.query.filter_by(id=2).first()
>>> tag2

>>> pic.tags=[tag1,tag2]
>>> db.session.add(pic)
>>> db.session.commit()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41001.html

相关文章

  • Laravel核心解读--Database(四) 模型关联

    摘要:为关联关系设置约束子模型的等于父模型的上面设置的字段的值子类实现这个抽象方法通过上面代码看到创建实例时主要是做了一些配置相关的操作,设置了子模型父模型两个模型的关联字段和关联的约束。不过当查询父模型时,可以预加载关联数据。 Database 模型关联 上篇文章我们主要讲了Eloquent Model关于基础的CRUD方法的实现,Eloquent Model中除了基础的CRUD外还有一个...

    gekylin 评论0 收藏0
  • Laravel Eloquent 模型关联速查表

    摘要:模型資料庫遷移儲存紀錄在及之間建立關聯在及之間建立關聯取得紀錄取得取得一对多关联示例细节在此示例中,我们有两个模型小偷和车,和两张表和。业务规则小偷可以偷走多辆车。关系图关联详情关联表应该保存驾驶员和汽车。 showImg(https://segmentfault.com/img/remote/1460000016043938); 一張 Laravel’s Eloquent ORM 5...

    flybywind 评论0 收藏0
  • Django 博客开发教程 3 - 创建 Django 博客的数据模型

    摘要:而对于标签来说,一篇文章可以有多个标签,同一个标签下也可能有多篇文章,所以我们使用,表明这是多对多的关联关系。理解多对一和多对多两种关联关系我们分别使用了两种关联数据库表的形式和。表明一种一对多的关联关系。 设计博客的数据库表结构 博客最主要的功能就是展示我们写的文章,它需要从某个地方获取博客文章数据才能把文章展示出来,通常来说这个地方就是数据库。我们把写好的文章永久地保存在数据库里,...

    Shimmer 评论0 收藏0
  • 模型高级特性,引入模型关联关系

    摘要:创建模型并设置关联关联关系设置模型关系一个对应多个,一个对应多个。手动在中增加关联关系。并且是实现了数据表之间的关联关系,比如一个对应多个,如下图。 文章来源:模型高级特性,引入模型关联关系 接着前面五篇: 环境搭建以及使用Ember.js创建第一个静态页面 引入计算属性、action、动态内容 模型,保存数据到数据库 发布项目,加入CRUD功能 从服务器获取数据,引入组件 前言 ...

    raise_yang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<