flask sqlalchemy join
时间: 2023-07-04 13:22:43 浏览: 88
在 Flask 中使用 SQLAlchemy 进行 JOIN 操作,可以通过在查询中使用 `join()` 方法来实现。下面是一个示例代码:
```python
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80), nullable=False)
content = db.Column(db.Text, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
user = db.relationship('User', backref=db.backref('posts', lazy=True))
@app.route('/')
def index():
posts = db.session.query(Post).join(User).filter(User.username == 'john').all()
return str(posts)
```
上面的代码中,我们定义了两个模型类 `User` 和 `Post`,并且在 `Post` 模型中定义了一个外键 `user_id`,它关联到了 `User` 模型的 `id` 字段。我们使用 `db.relationship()` 方法来定义了一个 `user` 属性,这个属性可以让我们通过 `post.user` 来访问到这个 `Post` 对象所属的 `User` 对象。
在视图函数中,我们使用 `db.session.query()` 方法来创建查询对象,然后使用 `join()` 方法来指定要关联的模型,最后使用 `filter()` 方法来添加查询条件。在这个例子中,我们查询所有属于用户名为 "john" 的用户的文章。
注意,在使用 `join()` 方法时,我们需要指定关联的属性名,这个属性名可以通过模型中定义的关系属性 `user` 来获取,即 `Post.user`。如果我们想要指定不同的属性名,可以使用 `join(User, Post.user_id == User.id)` 这样的语法来实现。
阅读全文