Flask
Introduction
We provide Flask middleware which when coupled with:
allow us to retrieve the controller
and route
correlated with your source code in your web app.
Using it
Having successfully installed sqlcommenter-python’s sqlcommenter
from sqlcommenter import FlaskMiddleware # Then in your flask programs just pass in the app FlaskMiddleware(app)
Expected fields
This Flask integration when coupled with compatible drivers will place the following fields
Field | Included by default | Description | Turn if off by |
---|---|---|---|
controller | ✔ | The function being used to service an HTTP request | with_controller=False |
framework | ✔ | “flask:<FLASK_VERSION>” | with_framework=False |
route | ✔ | The pattern used to match an HTTP request | with_route=False |
End to end examples
With psycopg2
#!/usr/bin/env python3 import psycopg2 import json import flask app = flask.Flask(__name__) from google.cloud.sqlcommenter import FlaskMiddleware from google.cloud.sqlcommenter.psycopg2.extension import CommenterCursorFactory conn = None @app.route('/polls') def get_polls(): cursor = conn.cursor() cursor.execute("SELECT * FROM polls_question") str_polls = list(map(lambda s: str(s), cursor)) cursor.close() return json.dumps(str_polls) def main(): global conn try: conn = psycopg2.connect(user='', password='$postgres$', host='127.0.0.1', port='5432', database='quickstart_py', cursor_factory=CommenterCursorFactory()) # Now enable the middleware. FlaskMiddleware(app) # Finally run the Flask web app. app.run(host='localhost', port=8088, threaded=True) except Exception as e: print('Encountered exception %s'%(e)) finally: if conn: conn.close() if __name__ == '__main__': main()
which when run by python3 main.py
and on visiting http://localhost:8088/polls we can see on our database logs
2019-06-08 12:19:11.284 PDT [70984] LOG: statement: SELECT * FROM polls_question /*controller='get_polls',db_driver='psycopg2',framework='sqlalchemy%3A1.3.4', route='/polls',traceparent='00-5b3df77064f35f091e89fb40022e2a1d-9bbd4868cf0ba2c3-01'*/
With sqlalchemy
Having successfully installed google-cloud-sqlcommenter you can now just run
#!/usr/bin/env python3 import json import flask app = flask.Flask(__name__) from sqlalchemy import create_engine, event from sqlcommenter import FlaskMiddleware from sqlcommenter.sqlalchemy.executor import BeforeExecuteFactory engine = None @app.route('/polls') def get_polls(): result_proxy = engine.execute("SELECT * FROM polls_question") str_polls = list(map(lambda s: str(s), result_proxy)) result_proxy.close() return json.dumps(str_polls) def main(): global engine engine = create_engine("postgresql://:[email protected]:5432/quickstart_py") event.listen(engine, 'before_cursor_execute', BeforeExecuteFactory(), retval=True) FlaskMiddleware(app) app.run(host='localhost', port=8089, threaded=True) if __name__ == '__main__': main()
which when run by python3 main.py
and on visiting http://localhost:8089/polls we can see on our database logs
2019-06-08 12:17:59.518 PDT [73546] LOG: statement: SELECT * FROM polls_question /*controller='get_polls',db_driver='psycopg2%3A2.8.2%20%28dt%20dec%20pq3%20ext%20lo64%29', dbapi_level='2.0',dbapi_threadsafety=2,driver_paramstyle='pyformat', framework='flask%3A1.0.3',libpq_version=100001,route='/polls'*/
References
Resource | URL |
---|---|
flask web framework | http://flask.pocoo.org/ |
sqlcommenter-psycopg2+flask | /python/psycopg2#with-flask |
sqlcommenter-sqlalchemy+flask | /python/sqlalchemy#with-flask |