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
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://:$postgres$@127.0.0.1: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'*/

sqlcommenter