Sto provando a creare una query di ricerca a livello di codice e, per farlo, mi unisco a un tavolo.Posso esaminare un oggetto query sqlalchemy per trovare le tabelle già unite?
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))
Questo è un esempio un po 'forzato: spero che abbia senso.
Dire il mio funzione di ricerca simile a:
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
In precedenza, ho tenuto traccia di ciò che le tabelle che sono già state unite in un elenco, e se la tabella è nella lista, assumere è già unito, e basta aggiungere il filtro.
Sarebbe bello se potessi guardare l'oggetto query, vedere che Tag
è già unito e saltare se lo è. Ho un po 'più complesso di query che potrebbe davvero trarne beneficio.
Se esiste una strategia completamente diversa per la creazione di query per le ricerche che ho perso, sarebbe fantastico. Oppure, se il codice di cui sopra va bene se mi unisco al tavolo due volte, questa è un'ottima informazione. Qualsiasi aiuto è incredibilmente apprezzato !!!
"Trova la tabella già unita" è una cosa che è necessario saltare i join duplicati. È sempre una buona pratica chiedere al tuo problema non i mezzi per risolverlo in un modo nella tua mente. Ad esempio chiedi "come saltare ad un tavolo se è già unito". – mtoloo