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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Flask-sqlalchemy外键关系映射

發布時間:2025/3/21 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flask-sqlalchemy外键关系映射 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文中,為了測試方便,所以使用sqlite,定義兩張表User Article
Article中author_id引用User表中的id,也就是author_id作為User表中id的外鍵

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__ = 'artivle'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')) # db.create_all()@app.route('/') def index():#想要添加文章,由于依賴于用戶,所以先添加用戶# user1 = User(username='zmy')# db.session.add(user1)# db.session.commit()#然后添加一篇文章article = Article(title = 'today',content = 'hello',author_id = 1)db.session.add(article)db.session.commit()return 'index'if __name__ == '__main__':app.run()

當我們想尋找文章標題為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'))#第一個參數為你要關系到哪個模型的名字,也就是類名#db.backref('articles')第一個參數articles為要反向引用的名字,也可以用其他名字#正向引用是Article訪問author,反向引用是從User訪問表Articleauthor = db.relationship('User',backref=db.backref('articles'))

然后在視圖函數中

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'))#第一個參數為你要關系到哪個模型的名字,也就是類名#db.backref('articles')第一個參數articles為要反向引用的名字,也可以用其他名字#正向引用是Article訪問author,反向引用是從User訪問表Articleauthor = db.relationship('User',backref=db.backref('articles'))#如果想新增字段,這里是不會做第二次映射的 #可以刪除數據庫重建,或者手動更改 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()#想要找文章標題為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() 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Flask-sqlalchemy外键关系映射的全部內容,希望文章能夠幫你解決所遇到的問題。

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