问题描述
我正在使用 sqlalchemy 学习 Flask,但遇到了这个问题。 假设我有 3 个模型:
class Author(db.Model):
sex = db.Column(db.String) # Male or female
zone = db.Column(db.String(1)) # (A or B)
class SellPlan(db.Model):
is_open = db.Column(db.Boolean)
has_discount = db.Column(db.Boolean)
class Book(db.Model):
plan = db.Column(db.SellPlan,db.ForeignKey('SellPlan'))
author = db.Column(db.Author,db.ForeignKey('Author'))
每本书都有计划和作者的外键。
现在,我想查询 A 区中所有男性作者。而且我还想预取(如 Django 中的预取),每个拥有 PlanSell 的作者的所有书籍都已打开并有折扣 (is_open=True
,{ {1}}),以便我以后可以轻松访问数据,例如 has_discount=True
。
我搜索我发现我们可以使用 author.books
但我仍然不知道如何通过 PlanSell 的字段进行过滤
请帮帮我^^
解决方法
我对您的代码进行了更改。您不需要为 SellPlan 制作表格,而是将其包含在 Book 表格中。
class Author(db.Model):
id = db.Column(db.Integer,primary_key = True)
sex = db.Column(db.String)
zone = db.Column(db.String(1))
books = db.relationship("Book",backref="author")
class Book(db.Model):
sno = db.Column(db.Integer,primary_key = True)
name = db.Column(db.String(15))
is_open = db.Column(db.Boolean)
has_discount = db.Column(db.Boolean)
author_id = db.Column(db.Integer,db.ForeignKey("author.id"))
我添加了 id 和 sno 因为创建表需要主键。
现在您将添加如下数据:
p4 = Author(sex="male",zone="A")
b2 = Book(name=flask",is_open=True,has_discount=True,author=p4)
访问您想要的数据:
b = []
a1 = Author.query.filter_by(sex="male",zone="A").all()
for i in a1:
a = Book.query.filter_by(is_open=True,author=i).first()
b.append(a)
a1 是作者,b 是书籍(都是列表)