摘要:以下為讀深入理解使用要建立相應(yīng)的數(shù)據(jù)模型而實際中模型之間又有一些不同的關(guān)系比如一一對應(yīng),一對多個,多對多個模型之間建立關(guān)系便必不可少了用戶表示例圖片表示例第一張圖片第二張圖片第三張圖片標簽表示例人物風景動物約束表示例一對一這種關(guān)聯(lián)似乎很少用
以下為讀《深入理解Flask》
使用SQLAIchemy要建立相應(yīng)的數(shù)據(jù)模型
而實際中模型之間又有一些不同的關(guān)系
比如一一對應(yīng),一對多個,多對多個用戶表示例
模型之間建立關(guān)系便必不可少了
ID | Username | Password | UserAvator | |
---|---|---|---|---|
1 | bayi | 123456 | upload/avator1jpg | [email protected] |
2 | babai | 123654 | upload/avator2.jpg | [email protected] |
3 | xiaoming | 654321 | upload/avator3.jpg | [email protected] |
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 |
這種關(guān)聯(lián)似乎很少用到,夫妻似乎是很好的生活模型
可以在丈夫一方加上外鍵,并加上唯一參數(shù)
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"))一對多
這個關(guān)系算是常用的了,這次的demo里也有這個:user->picture
一個用戶會上傳多張圖片,相當于把一對一里的唯一參數(shù)刪去
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))
多對多關(guān)系一開始寫就感覺對操作方面很迷,就實際操作了一下
實際操作一下可以體會一下他的這種用法
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()
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41001.html
摘要:為關(guān)聯(lián)關(guān)系設(shè)置約束子模型的等于父模型的上面設(shè)置的字段的值子類實現(xiàn)這個抽象方法通過上面代碼看到創(chuàng)建實例時主要是做了一些配置相關(guān)的操作,設(shè)置了子模型父模型兩個模型的關(guān)聯(lián)字段和關(guān)聯(lián)的約束。不過當查詢父模型時,可以預(yù)加載關(guān)聯(lián)數(shù)據(jù)。 Database 模型關(guān)聯(lián) 上篇文章我們主要講了Eloquent Model關(guān)于基礎(chǔ)的CRUD方法的實現(xiàn),Eloquent Model中除了基礎(chǔ)的CRUD外還有一個...
摘要:模型資料庫遷移儲存紀錄在及之間建立關(guān)聯(lián)在及之間建立關(guān)聯(lián)取得紀錄取得取得一對多關(guān)聯(lián)示例細節(jié)在此示例中,我們有兩個模型小偷和車,和兩張表和。業(yè)務(wù)規(guī)則小偷可以偷走多輛車。關(guān)系圖關(guān)聯(lián)詳情關(guān)聯(lián)表應(yīng)該保存駕駛員和汽車。 showImg(https://segmentfault.com/img/remote/1460000016043938); 一張 Laravel’s Eloquent ORM 5...
摘要:而對于標簽來說,一篇文章可以有多個標簽,同一個標簽下也可能有多篇文章,所以我們使用,表明這是多對多的關(guān)聯(lián)關(guān)系。理解多對一和多對多兩種關(guān)聯(lián)關(guān)系我們分別使用了兩種關(guān)聯(lián)數(shù)據(jù)庫表的形式和。表明一種一對多的關(guān)聯(lián)關(guān)系。 設(shè)計博客的數(shù)據(jù)庫表結(jié)構(gòu) 博客最主要的功能就是展示我們寫的文章,它需要從某個地方獲取博客文章數(shù)據(jù)才能把文章展示出來,通常來說這個地方就是數(shù)據(jù)庫。我們把寫好的文章永久地保存在數(shù)據(jù)庫里,...
摘要:創(chuàng)建模型并設(shè)置關(guān)聯(lián)關(guān)聯(lián)關(guān)系設(shè)置模型關(guān)系一個對應(yīng)多個,一個對應(yīng)多個。手動在中增加關(guān)聯(lián)關(guān)系。并且是實現(xiàn)了數(shù)據(jù)表之間的關(guān)聯(lián)關(guān)系,比如一個對應(yīng)多個,如下圖。 文章來源:模型高級特性,引入模型關(guān)聯(lián)關(guān)系 接著前面五篇: 環(huán)境搭建以及使用Ember.js創(chuàng)建第一個靜態(tài)頁面 引入計算屬性、action、動態(tài)內(nèi)容 模型,保存數(shù)據(jù)到數(shù)據(jù)庫 發(fā)布項目,加入CRUD功能 從服務(wù)器獲取數(shù)據(jù),引入組件 前言 ...
閱讀 2336·2021-10-08 10:04
閱讀 1117·2021-09-03 10:40
閱讀 1164·2019-08-30 15:53
閱讀 3321·2019-08-30 13:13
閱讀 2939·2019-08-30 12:55
閱讀 2293·2019-08-29 13:21
閱讀 1375·2019-08-26 12:12
閱讀 2765·2019-08-26 10:37