You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.9 KiB

import json
import sqlalchemy
from sqlalchemy.sql import select
from sqlalchemy.sql import text
from flask import Flask
from flask import render_template
app = Flask(__name__)
db_engine = {}
db_metadata = {}
parts = {}
@app.route('/')
def index():
return render_template('partsearch.html')
@app.route('/query/<filter>/<query>')
def query(filter, query):
query = '%' + query + '%'
s = 'select * from parts where '
if filter & (1 << 0) != 0:
s += 'type like :name or '
if filter & (1 << 1) != 0:
s += 'partno like :name or '
if filter & (1 << 2) != 0:
s += 'partnoalt like :name or '
if filter & (1 << 3) != 0:
s += 'partnoalt2 like :name or '
if filter & (1 << 4) != 0:
s += 'description like :name or '
s = s[:-4] + ';'
s = text(s)
r = db_engine.execute(s, name=query)
l = []
for row in r:
l.append(dict(row))
r.close()
return json.dumps(l)
def connect(user, password, db, host='localhost', port=5432):
'''Returns a connection and a metadata object'''
# We connect with the help of the PostgreSQL URL
url = 'postgresql://{}:{}@{}:{}/{}'
url = url.format(user, password, host, port, db)
# The return value of create_engine() is our connection object
con = sqlalchemy.create_engine(url, client_encoding='utf8')
# We then bind the connection to MetaData()
meta = sqlalchemy.MetaData(bind=con, reflect=True)
return con, meta
if __name__ == '__main__':
with open('admin.json') as f:
postgres_credentials = json.load(f)
db_engine, db_metadata = connect(postgres_credentials['username'], postgres_credentials['password'], 'parts')
parts = sqlalchemy.Table('parts', db_metadata)
# Example query
'''s = select([parts]).where(parts.c.notes != '')
for row in db_engine.execute(s):
print row'''
app.run('0.0.0.0')