Programlı bir arama sorgusu oluşturmaya çalışıyorum ve bunu yapmak için bir masaya katılıyorum.Önceden birleştirilen tabloları bulmak için bir sqlalchemy sorgu nesnesini denetleyebilir miyim?
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))
Bu biraz karmaşık bir örnektir - Umarım mantıklıdır.
benim arama fonksiyonu şey gibi görünüyor ki: Daha önce
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
, ben zaten bir listede katıldı ne tabloları takip sakladım ve tablo listesinde ise, bu zaten farz katıldı ve sadece filtreyi ekleyin.
Sorgu nesnesine bakabilseydim, Tag
zaten eklendiyse ve böyle bir durumda atlamanız güzel olur. Bundan daha fazla fayda sağlayacak daha karmaşık bir sorgulama yapıyorum.
Kaybettiğim aramalar için sorgu oluşturma konusunda tamamen farklı bir strateji varsa, bu da harika olur. Ya da yukarıdaki kod eğer tabloya iki kez katılırsa iyi olur, bu da harika bir bilgi. Herhangi bir yardım inanılmaz takdir! RMN cevap göre query._join_entities
joined_tables = [mapper.class_ for mapper in query._join_entities]
"Zaten birleştirilmiş tabloyu bulun", yinelenen birleştirmeleri atlamanız gereken bir şeydir. Sorununuzu, zihninizde bir şekilde çözmek için gerekli araçları sormak her zaman iyi bir uygulamadır. Örneğin, "zaten birleştirilmişse bir tabloya nasıl katılmayı atla" seçeneğini sorun. – mtoloo