sqlachemy: фильтр по отношениям (например, django orm)? - PullRequest
0 голосов
/ 30 октября 2018

В 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())

Как правильно сделать это в sqlalchemy, без явного JOIN s ??

1 Ответ

0 голосов
/ 30 октября 2018

Вы можете использовать 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'])))

К сожалению, в некоторых СУБД выражения подзапроса EXISTS могут работать плохо по сравнению с использованием явных объединений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...