Flask-sqlalchemy外键关系映射
生活随笔
收集整理的這篇文章主要介紹了
Flask-sqlalchemy外键关系映射
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本文中,為了測試方便,所以使用sqlite,定義兩張表User Article
Article中author_id引用User表中的id,也就是author_id作為User表中id的外鍵
當(dāng)我們想尋找文章標(biāo)題為today的作者可以用一下方式
article = Article.query.filter(Article.title =='today').first()user = User.query.filter(User.id == article.author_id).first()print(user.username)但這種方式太過于繁瑣,作為sqlalchemy可以用一下方法
class Article(db.Model):__tablename__ = 'article'id = db.Column(db.Integer,primary_key = True)title = db.Column(db.String(100),nullable = False)content = db.Column(db.String(100),nullable = True)#author_id引用User表中的idauthor_id = db.Column(db.Integer,db.ForeignKey('user.id'))#第一個參數(shù)為你要關(guān)系到哪個模型的名字,也就是類名#db.backref('articles')第一個參數(shù)articles為要反向引用的名字,也可以用其他名字#正向引用是Article訪問author,反向引用是從User訪問表Articleauthor = db.relationship('User',backref=db.backref('articles'))然后在視圖函數(shù)中
article = Article.query.filter(Article.title == 'today').first()print(article.author.username)與剛才比較繁瑣的方法對比
article = Article.query.filter(Article.title =='today').first()user = User.query.filter(User.id == article.author_id).first()print(user.username)這樣我們就可以獲取某個用戶的所有文章
user = User.query.filter(User.username == 'zmy').first()result = user.articlesfor article in result:print('-'*10)print(article.title)完整代碼
from flask import Flask from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./Article.db' db = SQLAlchemy(app)class User(db.Model):__tablename__ = 'user'id = db.Column(db.Integer,primary_key = True)username = db.Column(db.String(100),nullable = False)class Article(db.Model):__tablename__ = 'article'id = db.Column(db.Integer,primary_key = True)title = db.Column(db.String(100),nullable = False)content = db.Column(db.String(100),nullable = True)#author_id引用User表中的idauthor_id = db.Column(db.Integer,db.ForeignKey('user.id'))#第一個參數(shù)為你要關(guān)系到哪個模型的名字,也就是類名#db.backref('articles')第一個參數(shù)articles為要反向引用的名字,也可以用其他名字#正向引用是Article訪問author,反向引用是從User訪問表Articleauthor = db.relationship('User',backref=db.backref('articles'))#如果想新增字段,這里是不會做第二次映射的 #可以刪除數(shù)據(jù)庫重建,或者手動更改 db.create_all()@app.route('/') def index():#想要添加文章,由于依賴于用戶,所以先添加用戶# user1 = User(username='zmy')# db.session.add(user1)# db.session.commit()#然后添加一篇文章# article = Article(title = 'tomorrow',content = 'Hi',author_id = 3)# db.session.add(article)# db.session.commit()#想要找文章標(biāo)題為today的作者# article = Article.query.filter(Article.title =='today').first()# user = User.query.filter(User.id == article.author_id).first()# print(user.username)#想找zmy寫過哪些文章article = Article.query.filter(Article.title == 'today').first()# print(article.author.username)#希望用author.articles的方式就能獲得zmy寫過的所有文章# author.articles# article = Article(title = 'yesterday',content = 'world')# article.author = User.query.filter(User.id == 1).first()user = User.query.filter(User.username == 'zmy').first()result = user.articlesfor article in result:print('-'*10)print(article.title)return 'index'if __name__ == '__main__':app.run() 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Flask-sqlalchemy外键关系映射的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python—UnicodeEncode
- 下一篇: Flask实现成绩查询接口