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