gpt4 book ai didi

python - Flask/SQLAlchemy - 请求具有多对多关系的表

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:00 26 4
gpt4 key购买 nike

我使用 Flask 和 SQLAlchemy 创建了一个基于数据库的应用程序。这是我定义的类:

模型.py

 class HasTag(db.Model):
tagged_document_id = db.Column(db.Integer, db.ForeignKey('Document.id'), primary_key=True)
document_tag_id = db.Column(db.Integer, db.ForeignKey('Tag.id'), primary_key=True)

class Document(db.Model):
id = db.Column(db.Integer, unique=True, nullable=False, primary_key=True, autoincrement=True)
title = db.Column(db.Text)
tag = db.relationship("Tag",
secondary=HasTag,
back_populates="tagged_document",
lazy="dynamic")

class Tag(db.Model):
id = db.Column(db.Integer, unique=True, nullable=False, primary_key=True, autoincrement=True)
label = db.Column(db.String, nullable=False)
tagged_document = db.relationship("Document",
secondary=HasTag,
back_populates="tag",
lazy="dynamic")

在应用程序中,我有一个高级搜索表单,可以在文档表的不同字段中进行全文搜索。

routes.py

@app.route("/search")
def search():
keyword = request.args.get("keyword", None)
query = Document.query

if keyword:
query = Document.query.filter(or_(
Document.title.like("%{}%".format(keyword)),
...
))

问题是,我希望能够在标签的标签中搜索用户给出的关键字。我试过类似的东西:

    if keyword:
query = Document.query.join(Tag).filter(or_(
Document.title.like("%{}%".format(keyword)),
...,
Tag.label.like("%{}%".format(keyword))
))

但我得到这个错误:AttributeError: 'HasTag' object has no attribute 'foreign_keys'

你能帮帮我吗?谢谢!

最佳答案

我在我的一个项目中有一个类似的结构,这就是我定义relatioship的方式:

leagues = db.relationship("League", 
secondary=LeagueTeamAssociation.__tablename__,
back_populates="teams")

因此,您需要使用上述语法为 secondary 参数提供表名(您需要将 __tablename__ 添加到您的 HasTag 类)或使用字符串“has_tag”(前提是这是数据库中表的名称)。

关于python - Flask/SQLAlchemy - 请求具有多对多关系的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55220240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com