Improved search query

pull/3/head
Davide Bongiovanni 6 years ago
parent 48f8ef5ddc
commit 8e4002c25d

@ -9,6 +9,9 @@ from flask import Flask
from flask import render_template, send_from_directory, request, Response
from werkzeug.utils import secure_filename
import pprint
pp = pprint.PrettyPrinter(indent=4)
app = Flask(__name__)
db_engine = {}
@ -49,20 +52,45 @@ def get_part_info(partID):
r.close()
return json.dumps(l[0])
@app.route('/parts/query/<filter>/<query>')
def query(filter, query):
query = '%' + query + '%'
filter = int(filter)
@app.route('/parts/query/<filter_dummy>/<query>')
def query(filter_dummy, query):
filter = request.args.to_dict()
keywords = query.split() # Default splits with spaces
for i in range(len(keywords)):
keywords[i] = '%' + keywords[i] + '%'
kw_dict = {}
for i in range(len(keywords)):
kw_dict["kw" + str(i)] = keywords[i]
s = 'select p.id,partno,description,l.name as location_descriptor from parts as p inner join locations as l on p.location_id = l.id where '
if filter & (1 << 1) != 0:
s += 'LOWER(partno) like LOWER(:name) or '
if filter & (1 << 4) != 0:
s += 'LOWER(description) like LOWER(:name) or '
if filter & (1 << 5) != 0:
s += 'LOWER(notes) like LOWER(:name) or '
if filter['l']:
s += '('
for i in range(len(keywords)):
s += 'LOWER(l.name) like LOWER(:kw'+ str(i) +') AND '
s = s[:-5]
s += ') OR '
if filter['p']:
s += '('
for i in range(len(keywords)):
s += 'LOWER(partno) like LOWER(:kw'+ str(i) +') AND '
s = s[:-5]
s += ') OR '
if filter['d']:
s += '('
for i in range(len(keywords)):
s += 'LOWER(description) like LOWER(:kw'+ str(i) +') AND '
s = s[:-5]
s += ') OR '
if filter['n']:
s += '('
for i in range(len(keywords)):
s += 'LOWER(notes) like LOWER(:kw'+ str(i) +') AND '
s = s[:-5]
s += ') OR '
s = s[:-4] + ';'
print(s)
s = text(s)
r = db_engine.execute(s, name=query)
r = db_engine.execute(s, kw_dict)
l = []
for row in r:
l.append(dict(row))

Loading…
Cancel
Save