让我为你详细讲解“python flask 多对多表查询功能”的完整攻略。
1. 创建多对多模型
首先,我们需要创建多对多模型。多对多模型通常需要三个表:一个主表,一个辅助表和一个次表。
在Flask中,我们可以使用SQLAlchemy库来创建多对多模型,示例如下:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
# 创建主表
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), nullable=False)
# 创建辅助表
followers = db.Table('followers',
db.Column('follower_id', db.Integer, db.ForeignKey('users.id')),
db.Column('followed_id', db.Integer, db.ForeignKey('users.id'))
)
# 创建次表
class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
body = db.Column(db.Text)
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
# 添加一个属性,用于通过backref查询用户的所有帖子
author = db.relationship('User', backref=db.backref('posts', lazy='dynamic'))
# 添加一个属性,用于查询所有收藏该帖子的用户
# secondary参数告诉SQLAlchemy这是一个多对多关系
# 这里的followers是辅助表
liked_by = db.relationship('User', secondary=followers,
primaryjoin=(followers.c.followed_id == id),
secondaryjoin=(followers.c.follower_id == id),
backref=db.backref('likes', lazy='dynamic'),
lazy='dynamic')
这个模型包括了三个表:users
表、posts
表以及 followers
表。users
表是主表,posts
表是次表,followers
表是辅助表,用于存储用户之间的关注关系。
2. 实现多对多查询
有了多对多模型,我们就可以实现多对多查询了。以下是两个示例:
示例一:查询一个用户的所有关注者和所有关注了该用户的人
@app.route('/users/<username>')
def user(username):
# 通过用户的用户名查询该用户
user = User.query.filter_by(username=username).first()
# 查询该用户的所有关注者和所有关注了该用户的人
followers = user.followers.join(User.followed).all()
return render_template('user.html', user=user, followers=followers)
这里,我们首先通过用户名查找到一个用户。然后,我们使用 join()
方法查询该用户的所有关注者和所有关注了该用户的人,这里的 join()
方法是通过SQLAlchemy多对多关系中的 secondary
参数和两个 join()
方法来实现的。
示例二:查询一个帖子被哪些用户收藏
@app.route('/posts/<int:id>')
def post(id):
# 通过帖子的id查询该帖子
post = Post.query.get(id)
# 查询所有收藏该帖子的用户
liked_by = post.liked_by.all()
return render_template('post.html', post=post, liked_by=liked_by)
这里,我们首先通过帖子的ID查找到该帖子。然后,我们使用 liked_by
属性查询所有收藏该帖子的用户。由于这是一个多对多关系,liked_by
属性返回一个可查询对象,我们可以使用 all()
方法查询所有结果。
结论
以上就是实现 "Python Flask 多对多表查询功能" 的完整攻略以及两个实际应用示例。多对多查询功能是非常有用的,可以帮助我们实现很多高级的应用程序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python flask 多对多表查询功能 - Python技术站