Je suis l'aide de la version 3.9 de python et de tenter de créer un mot clé de recherche, où l'utilisateur peut saisir une chaîne de mots-clés et que la chaîne peut être interrogée sur la base de données contenant des chaînes de caractères. Il n'y a pas d'erreurs de compilation et tout fonctionne, mais le résultat de la requête n'est pas ce que j'attends. Au lieu de renvoyer toutes les lignes qui contiennent des mots similaires pour le mot-clé dans la colonne description, il renvoie la requête dans la forme d'une chaîne.
C'est mon init.py fichier:
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_msearch import Search
...
app = Flask(__name__)
searched = Search(app)
searched.init_app(app)
searched.create_index(update=True)
MSEARCH_INDEX_NAME = os.path.join(app.root_path,'msearch')
MSEARCH_ENABLE = True
from .search import search as search_blueprint
app.register_blueprint(search_blueprint)
return app
C'est mon models.py fichier
class Service (db.Model):
__searchable__ = ['description']
provider_id = db.Column(db.Integer, db.ForeignKey('provider.provider_id'), nullable=False)
service_id = db.Column(db.Integer, nullable=False, primary_key=True)
rating_avg = db.Column(db.Float(precision=2), nullable=False)
service_name = db.Column(db.String(20), nullable=False)
cost = db.Column(db.Float(precision=2), nullable=False)
description = db.Column(db.String(255), nullable=False)
category = db.Column(db.String(20), nullable=False)
def __repr__(self):
return 'String representation of Service'
C'est mon search.py fichier:
search = Blueprint('search', __name__)
@search.route('/search')
def searching():
return render_template('search.html')
@search.route('/search', methods=['POST'])
def searching_post():
searchInput = request.form.get('searchInput')
results = Service.query.msearch(searchInput, fields= ['description'])
return render_template('result.html', results=results)
C'est mon search.html fichier de modèle:
{% extends "base.html" %}
{% block content %}
<div class="column is-8 is-offset-2">
<h1 class ="title">
Enter keywords and minimum rating
</h1>
<div class="box">
<form method="POST" action="/search">
<div class="field">
<div class="form-group">
<input class="input is-large" type="text" name="searchInput" placeholder=" " autofocus="">
</div>
</div>
<button class="button is-block is-info is-large is-fullwidth">Search</button>
</form>
</div>
</div>
{% endblock %}
C'est le résultat que j'obtiens quand je recherche quelque chose dans la barre de recherche:
Results: SELECT service.provider_id AS service_provider_id, service.service_id AS service_service_id, service.rating_avg AS service_rating_avg, service.service_name AS service_service_name, service.cost AS service_cost, service.description AS service_description, service.category AS service_category FROM service WHERE (service.description LIKE '%' || ? || '%')!