微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获取查询集中每个对象的所有相关对象,由 Sqlalchemy 中的另一个模型过滤?

如何解决如何获取查询集中每个对象的所有相关对象,由 Sqlalchemy 中的另一个模型过滤?

我正在使用 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 是书籍(都是列表)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。