django ORMでは、関係属性で直接フィルタリングできます。たとえば、テーブルが与えられた
class Product(models.Model):
product_id = models.IntegerField(primary_key=True)
color = models.TextField()
class Sale(models.Model):
sale_id = models.IntegerField(primary_key=True)
timestamp = models.DateTimeField()
product = models.ForeignKey(Product, on_delete=models.CASCADE)
できるよ
Sale.objects.filter(product__color__in=['red', 'blue'])
またはその逆
Product.objects.filter(sale__timestamp__gt=datetime.now())
明示的なJOINを使用せずにsqlalchemyでこれを行う適切な方法は何ですか?
非スカラーおよびスカラーの関係に基づいてany()
、およびhas()
を使用してフィルタリングできます。それらはEXISTSサブクエリ式を生成します。
session.query(Product).filter(Product.sales.any(Sale.timestamp > datetime.now()))
そして
session.query(Sale).filter(Sale.product.has(Product.color.in_(['red', 'blue'])))
残念ながら、一部のDBMSでは、明示的結合を使用する場合と比較して、EXISTSサブクエリ式のパフォーマンスが低下する場合があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加