摘要:以下為讀深入理解使用要建立相應的數據模型而實際中模型之間又有一些不同的關系比如一一對應,一對多個,多對多個模型之間建立關系便必不可少了用戶表示例圖片表示例第一張圖片第二張圖片第三張圖片標簽表示例人物風景動物約束表示例一對一這種關聯似乎很少用
以下為讀《深入理解Flask》
使用SQLAIchemy要建立相應的數據模型
而實際中模型之間又有一些不同的關系
比如一一對應,一對多個,多對多個用戶表示例
模型之間建立關系便必不可少了
ID | Username | Password | UserAvator | |
---|---|---|---|---|
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()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41001.html
摘要:為關聯關系設置約束子模型的等于父模型的上面設置的字段的值子類實現這個抽象方法通過上面代碼看到創建實例時主要是做了一些配置相關的操作,設置了子模型父模型兩個模型的關聯字段和關聯的約束。不過當查詢父模型時,可以預加載關聯數據。 Database 模型關聯 上篇文章我們主要講了Eloquent Model關于基礎的CRUD方法的實現,Eloquent Model中除了基礎的CRUD外還有一個...
摘要:模型資料庫遷移儲存紀錄在及之間建立關聯在及之間建立關聯取得紀錄取得取得一對多關聯示例細節在此示例中,我們有兩個模型小偷和車,和兩張表和。業務規則小偷可以偷走多輛車。關系圖關聯詳情關聯表應該保存駕駛員和汽車。 showImg(https://segmentfault.com/img/remote/1460000016043938); 一張 Laravel’s Eloquent ORM 5...
摘要:而對于標簽來說,一篇文章可以有多個標簽,同一個標簽下也可能有多篇文章,所以我們使用,表明這是多對多的關聯關系。理解多對一和多對多兩種關聯關系我們分別使用了兩種關聯數據庫表的形式和。表明一種一對多的關聯關系。 設計博客的數據庫表結構 博客最主要的功能就是展示我們寫的文章,它需要從某個地方獲取博客文章數據才能把文章展示出來,通常來說這個地方就是數據庫。我們把寫好的文章永久地保存在數據庫里,...
摘要:創建模型并設置關聯關聯關系設置模型關系一個對應多個,一個對應多個。手動在中增加關聯關系。并且是實現了數據表之間的關聯關系,比如一個對應多個,如下圖。 文章來源:模型高級特性,引入模型關聯關系 接著前面五篇: 環境搭建以及使用Ember.js創建第一個靜態頁面 引入計算屬性、action、動態內容 模型,保存數據到數據庫 發布項目,加入CRUD功能 從服務器獲取數據,引入組件 前言 ...
閱讀 2323·2021-10-08 10:04
閱讀 1097·2021-09-03 10:40
閱讀 1150·2019-08-30 15:53
閱讀 3309·2019-08-30 13:13
閱讀 2925·2019-08-30 12:55
閱讀 2278·2019-08-29 13:21
閱讀 1330·2019-08-26 12:12
閱讀 2755·2019-08-26 10:37