Próbuję programowo zbudować kwerendę wyszukiwania, a do tego dołączam do tabeli.Czy mogę sprawdzić obiekt zapytań sqlalchemy, aby znaleźć już połączone tabele?
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))
To jest trochę wymyślny przykład - mam nadzieję, że ma to sens.
Say my funkcja wyszukiwania wygląda mniej więcej tak:
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
Wcześniej ja śledził co tabel, które zostały już połączone w liście, a jeśli tabela znajduje się na liście, załóżmy, że to już dołączył i po prostu dodaj filtr.
Byłoby fajnie, gdybym mógł spojrzeć na obiekt zapytania, zobacz, czy Tag
jest już połączony, i pomiń go, jeśli tak. Mam bardziej złożony proces tworzenia zapytań, który naprawdę skorzystałby na tym.
Jeśli istnieje zupełnie inna strategia budowania zapytań dla wyszukiwań, które przeoczyłem, to też byłoby świetnie. Lub, jeśli powyższy kod jest w porządku, jeśli dołączę do stołu dwa razy, to także świetna informacja. Każda pomoc jest niewiarygodnie ceniona !!!
"Znajdź już połączoną tabelę" to rzecz, którą należy pominąć zduplikowane połączenia. Zawsze dobrą praktyką jest zadawanie problemu, a nie sposób rozwiązania go w pewien sposób w umyśle. Na przykład zapytaj "jak pominąć dołączanie do tabeli, jeśli jest już połączone". – mtoloo