Существует ли эквивалент Django для записи оператора SQL SELECT с функцией в предложении WHERE? - PullRequest
2 голосов
/ 29 мая 2020

У меня есть серия выравниваний белковых последовательностей со вставками (символ '-'), которые необходимо удалить, чтобы я мог искать шаблон в последовательности.

Я могу сделать это с помощью следующего SQL query:

select sequence
from sequences
where replace(sequences.sequence,"-","") like "%"+pattern+"%"
  1. Насколько я понимаю, наличие замены и сопоставления с образцом в запросе должно быть более эффективным, чем перебор каждой последовательности и выполнение замены и сопоставления с образцом в python. Это правильно?

  2. Если # 1 правильный, существует ли Django эквивалент этого запроса?

1 Ответ

2 голосов
/ 29 мая 2020

Да, вы можете использовать выражение Replace [Django -doc] с:

from django.db.models import Value
from django.db.models.functions import <b>Replace</b>

Sequence.objects.annotate(
    replaced=<b>Replace('sequence', Value('-'), Value(''))</b>
).filter(
    <b>replaced__icontains=<i>pattern</i></b>
)

Это действительно будет больше эффективнее, чем выборка всех записей и выполнение фильтрации на уровне Django / Python, но все же это приведет к линейному времени поиска, что не очень эффективно.

Может быть лучше, если вы каким-то образом «подготовите» "шаблон с дефисами, и таким образом удалить часть Replace базы данных.

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