我想以编程方式构建搜索查询,并且要这样做,我要加入一个表。我可以检查sqlalchemy查询对象以查找已连接的表吗?
class User(db.Model):
id = db.Column(db.Integer(), primary_key=True)
class Tag(db.Model):
id = db.Column(db.Integer(), primary_key=True)
user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
title = db.Column(db.String(128))
description = db.Column(db.String(128))
这是一个有点人为的例子 - 我希望它是有道理的。
说我的搜索功能看起来像:
def search(title_arg, desc_arg):
query = User.query
if title_arg:
query = query.join(Tag)
query = query.filter(Tag.title.contains(title_arg))
if desc_arg:
query = query.join(Tag)
query = query.filter(Tag.description.contains(desc_arg))
return query
以前,我一直保留着的轨道,已经在列表中加入了什么样的表,如果表是在列表中,假设它已经加入,并添加过滤器。
如果我可以查看查询对象,请参阅Tag
已加入,如果是,则跳过它会很酷。我有一些更复杂的查询构建,真的会从中受益。
如果对于我错过的搜索构建查询有一个完全不同的策略,那也会很棒。或者,如果上面的代码很好,如果我加入表格两次,那也是很好的信息。任何帮助都令人难以置信的赞赏!在query._join_entities
joined_tables = [mapper.class_ for mapper in query._join_entities]
“查找已连接的表”是您需要跳过重复连接的事情。问你的问题不是解决问题的方法,总是一种很好的做法。例如,询问“如果已经加入,如何跳过加入表格”。 – mtoloo