プログラムで検索クエリを作成しようとしています。そのために、私はテーブルに参加しています。すでに結合されたテーブルを見つけるために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
が既に参加していることを確認し、そうであればスキップしてください。私は実際にこれから恩恵を受けるいくつかのより複雑なクエリビルドを持っています。
私が逃した検索のためのクエリ構築のための全く別の戦略がある場合、それも素晴らしいでしょう。または、上記のコードが2回テーブルに加わるとうまくいけば、それは素晴らしい情報です。どんな助けも信じられないほど高く評価されています!
"既に結合されたテーブルを検索"は、重複した結合をスキップする必要があることです。問題をあなたの心の中で解決する手段ではなく、常にそれを尋ねるのは良い習慣です。たとえば、「すでに結合されている場合は、テーブルへの結合をスキップする方法」を尋ねることができます。 – mtoloo