flask_sqlalchemy join的正確使用方法


flask_sqlalchemy包裹了sqlalchemy一些操作,其能夠更好的與flask協作,flask_sqlalchemy中的大部分api來自於sqlalchemy.orm.query.Query,直接使用集成db.Model類的query屬性就可以得到Query類,例如一下實例

class Users(db.Model):

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

    username = db.Column(db.String(20), unique=True, nullable=False)

    password = db.Column(db.String(40), nullable=False)

 

class File(db.Model):

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

    userid = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)

    filename = db.Column(db.String(40), nullable=False)

    filesize = db.Column(db.Integer)

直接使用File.query就會返回db.session.query(SomeMappedClass),使用的api參照Query的api。

在使用Qurey的join的時候采用代碼,File.query.join(Users.id),這是官方給出的文檔中的使用方式

 

但我在使用后出現錯誤

 

后來才發現,文檔中說明了使用條件在User與Address存在mapping的,而我這里並沒有,使用的db.Model類與官方的類也不相同,因此在文檔后續中查找到了下面一條信息

 

這個是將傳入的參數換為入口或者是表,這樣才了解到之前的用法是有問題,按照這里的說法應該是可以傳入一個表或者是另外的query,因此參數應該是這樣的

File.query.join(Users.query)

File.query.join(Users)

File.query.join(Users.__table__)

通過源代碼可以看到,flask_sqlalchemy會將定義的Column創建為一張sqlalchemy表並存在__table__中。而在這里Users.query代表了一個query入口,Model也應該實現了類似query相應的入口,因此可以簡寫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM