используя расстояние Левенштейна для сортировки поискового запроса в sqlalchemy? - PullRequest
0 голосов
/ 12 апреля 2020

Я пытался заставить Sqlalchemy использовать функцию (расстояние Левенштейна), чтобы упорядочить результаты запроса, я попробовал некоторые идеи здесь и там, но ни одна из них не использует параметр, которого нет в Sqlalchemy. смоделируйте его самостоятельно, вот что я пытаюсь сделать:

    communs=baladiya.query.filter_by(wilaya=wilaya).filter(baladiya.name.like('%{}%'.format(name))).order_by(jf.Levenshtein_Distance(searchstring,baladiya.name)).paginate(per_page=4,page=page)

Я использую этот метод, чтобы держать приложение хорошо структурированным и могу использовать объект paginate, если это вообще невозможно, есть ли способ создать пустой запрос, а затем продолжить добавление, используя мою собственную сортировку.

это модель баладия:

class baladiya(db.Model):
id = db.Column(db.Integer , primary_key=True)
name = db.Column(db.String(1000),unique=False , nullable=False)
postalcode = db.Column(db.String(10),unique=True, nullable=False)
posX = db.Column(db.String(20), nullable=True, default='16000')
posY = db.Column(db.String(20), nullable=True, default='16000')
wilaya= db.Column(db.Integer,unique=False, nullable=False)

1 Ответ

0 голосов
/ 23 апреля 2020

Я сделал несколько попыток сам, и что Sqlalchemy на самом деле делает, когда вы передаете запрос фильтра, это то, что он создает запрос на основе mysql, что означает, что он не извлекает данные и применяет фильтр, а просто отправляет запрос лучше извлеките нужные данные, а затем примените то, что вы хотите, к списку.

...