Алгоритмы поиска SQLAlchemy - PullRequest
2 голосов
/ 25 июля 2011

Я работаю над веб-приложением-пирамидой, использующим SQLAlchemy.
У меня есть база данных из 7000 американских университетов и поле ввода на входе для ввода университета. В поле ввода используется автозаполнение пользовательского интерфейса jQuery, которое позже вызывает мое приложение-пирамиду с помощью AJAX, чтобы получить список опций. То, как я получаю результаты на основе этого термина, выглядит следующим образом: session.query(University).filter(University.name.like('%' + term + '%')
Это работает довольно прилично, однако я хотел бы поддержать следующее - когда пользователь поступает в UCLA, я хотел бы найти Калифорнийский университет в Лос-Анджелесе. Для бывшего СССР - Университет штата Флорида и т. Д.
Кроме итерации всего моего списка университетов (~ 8000) и ручного определения соответствия имени, есть ли способ указать функцию сопоставления для запроса / фильтра sqlalchemy?

Спасибо!

1 Ответ

1 голос
/ 25 июля 2011

SQLAlchemy по сути является интерфейсом к SQL. Если ваш запрос не может быть легко выражен в виде SQL, вряд ли вы увидите какую-либо выгоду от попытки исказить его в этом направлении по сравнению с простой итерацией вручную - он все равно должен вытащить всю строку и сравнить это, делаете ли вы это или оно делает это.

Однако, если вы ищете X, вы также хотите найти Y, который может быть получен из X, сначала найдите Y, а затем запросите оба, используя оператор ИЛИ .

есть. Не делай:

get all rows, and for each row, see if it matches X or Y

вместо этого:

get all rows that match X plus all rows that match Y.

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