python - 我可以检查 sqlalchemy 查询对象以查找已连接的表吗?

标签 python join sqlalchemy flask-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]

关于python - 我可以检查 sqlalchemy 查询对象以查找已连接的表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35829083/

相关文章:

python - Django 中的虚拟过滤器

linq-to-sql - 需要帮助将带有连接和分组依据/计数的查询转换为 LINQ to SQL

python - 如何基于跨 2 个数据框的共享列创建具有列值的新列?

sql - 在内连接的 ON 子句中放置条件与主查询的 where 子句中是否存在逻辑差异?

python - SQLAlchemy 模型中的流程字段(使用 flask_sqlalchemy)

python 的基本元类 : a pure-python analogue?

python - python 3日志记录级别有什么区别?

python - 如何从sqlalchemy中的方言特定类型获取通用数据类型?

python - SQLAlchemy 声明一对多未定义错误

可以突出显示方法/类并跳转到其定义的 Python IDE