日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

flask sqlalchemy一对多关系详解

發布時間:2024/4/13 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flask sqlalchemy一对多关系详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面的一對多關系以作者和文章為例:

首先創建一個文章表:

class Post(db.Model):

  id = db.Column(db.Integer(),primary_key=True)

? ? ? ?title = db.Column(db.String(255))

  text = db.Column(db.Text())

  publish_date = db.Column(db.DateTime())

  user_id = db.Column(db.Integer(),db.ForeignKey('user.id'))

此處注意:

user_id字段,表示一個外鍵約束,(外鍵約束是一種約束規則,它強制要求user_id字段的值存在于user表的id列中,這是數據庫進行的一項檢查,用來保證每個Post對象都會對應得到一個已有的user)

傳給db.ForeignKey的參數,是一個用來代表user表id列的字符串,如果user表中用__tablename__自定義表名,則需要用自定義的表名

(多的一方寫ForeignKey)

?

下面創建作者表:

class User(db.Model):

  id = db.Column(db.Integer(),primary_key=True)

  username = db.Column(db.String(255))

  password = db.Column(db.String(255))

  posts = db.relationship('Post',backref='user',lazy='dynamic')

現在我們通過使用User.posts屬性來得到一個posts列表

backref參數可以使我們通過Post.user屬性對User對象進行讀取和修改

簡記:

一的一方寫relationship,可以通過表名.字段得到一個列表

多的一方寫ForeignKey,可以通過表名.(一的一方的backref)對一的一方進行讀取和修改

?

使用Join進行關聯查詢:

join查詢參考下面的鏈接:https://www.thatyou.cn/flask%E4%BD%BF%E7%94%A8flask-sqlalchemy%E6%93%8D%E4%BD%9Cmysql%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%88%E4%B8%89%EF%BC%89-%E8%81%94%E8%A1%A8%E4%B8%80%E5%AF%B9%E5%A4%9A%E6%9F%A5%E8%AF%A2/

下面對flask sqlalchemy查詢進行詳細說明:

SQLAlchemy 可以通過Model.query方法對數據進行查詢,Model.query是db.session.query(Model)的簡寫

一,

使用all()獲取數據庫中的所有行,并作為列表返回。

eg1.? ? User.query.all()

可以通過limit()函數來指定希望返回的總行數

User.query.limit(10).all()

可以通過order_by控制排序方式(并不是默認的按照主鍵進行排序)

正向排序:? User.query.order_by(User.username).all()

逆向排序:User.query.order_by(User.username.desc()).all()

如果想只返回一行數據,則可以使用first()代替all()

User.query.first()

要通過主鍵取得一行數據,可使用query.get()

User.query.get(1)

上面的這些函數可以鏈式調用

User.query.order_by(User.username).limit(10).all()

first()和all()方法會返回結果,并且終止鏈式調用,pagination(分頁),可以用來替代first()和all(),不過pagination方法跟first()和all()方法有區別,paginnation得到的是一個pagination對象,而不是對象列表

page=User.query.paginate(1,10)

得到的這個page(pagination對象有幾個屬性)

page.items? ?返回的是User對象列表(這個是最常用的,其他的先不寫)

?

條件查詢:

根據一些條件的集合獲得過濾后的數據,要得到滿足一系列等式條件的列表,比如,要得到用戶名為fake_name的用戶列表,可以這樣:

User.query.filter_by(username='fake_name').all()

當然filter_by函數也是可以鏈式調用的,如下:

User.query.order_by(User.username.desc()).filter_by(username='fake_name').limit(2).all()

注意:filter_by只有在你確切的知道查找的值時,才可以用

filter則可以避免(filter可以接受任何python表達式<,>,==)

User.query.filter(user.id>1).all()

?

轉載于:https://www.cnblogs.com/daqingzi/p/9454969.html

總結

以上是生活随笔為你收集整理的flask sqlalchemy一对多关系详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。