app.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #!/usr/bin/env python
  2. from flask import Flask, jsonify, request, render_template
  3. from flask.ext.sqlalchemy import SQLAlchemy
  4. from sqlalchemy import create_engine
  5. from random import randint
  6. from operator import attrgetter
  7. try:
  8. import MySQLdb
  9. mysql_schema = "mysql:"
  10. except ImportError:
  11. mysql_schema = "mysql+pymysql:"
  12. # setup
  13. app = Flask(__name__)
  14. app.config['SQLALCHEMY_DATABASE_URI'] = mysql_schema + '//benchmarkdbuser:benchmarkdbpass@DBHOSTNAME:3306/hello_world?charset=utf8'
  15. db = SQLAlchemy(app)
  16. dbraw_engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'])
  17. # models
  18. class World(db.Model):
  19. __tablename__ = "World"
  20. id = db.Column(db.Integer, primary_key=True)
  21. randomNumber = db.Column(db.Integer)
  22. # http://stackoverflow.com/questions/7102754/jsonify-a-sqlalchemy-result-set-in-flask
  23. @property
  24. def serialize(self):
  25. """Return object data in easily serializeable format"""
  26. return {
  27. 'id' : self.id,
  28. 'randomNumber': self.randomNumber
  29. }
  30. class Fortune(db.Model):
  31. __tablename__ = "Fortune"
  32. id = db.Column(db.Integer, primary_key=True)
  33. message = db.Column(db.String)
  34. # views
  35. @app.route("/json")
  36. def hello():
  37. resp = {"message": "Hello, World!"}
  38. return jsonify(resp)
  39. @app.route("/db")
  40. def get_random_world():
  41. num_queries = request.args.get("queries", 1)
  42. worlds = []
  43. for i in range(int(num_queries)):
  44. wid = randint(1, 10000)
  45. worlds.append(World.query.get(wid).serialize)
  46. return jsonify(worlds=worlds)
  47. @app.route("/dbs")
  48. def get_random_world_single():
  49. wid = randint(1, 10000)
  50. worlds = [World.query.get(wid).serialize]
  51. return jsonify(worlds=worlds)
  52. @app.route("/dbraw")
  53. def get_random_world_raw():
  54. connection = dbraw_engine.connect()
  55. num_queries = request.args.get("queries", 1)
  56. worlds = []
  57. for i in range(int(num_queries)):
  58. wid = randint(1, 10000)
  59. result = connection.execute("SELECT * FROM world WHERE id = " + str(wid)).fetchone()
  60. worlds.append({'id': result[0], 'randomNumber': result[1]})
  61. connection.close()
  62. return jsonify(worlds=worlds)
  63. @app.route("/dbsraw")
  64. def get_random_world_single_raw():
  65. connection = dbraw_engine.connect()
  66. wid = randint(1, 10000)
  67. result = connection.execute("SELECT * FROM world WHERE id = " + str(wid)).fetchone()
  68. worlds = [{'id': result[0], 'randomNumber': result[1]}]
  69. connection.close()
  70. return jsonify(worlds=worlds)
  71. @app.route("/fortunes")
  72. def get_fortunes():
  73. fortunes = list(Fortune.query.all())
  74. fortunes.append(Fortune(id=0, message="Additional fortune added at request time."))
  75. fortunes.sort(key=attrgetter('message'))
  76. return render_template('fortunes.html', fortunes=fortunes)
  77. @app.route("/fortunesraw")
  78. def get_forutens_raw():
  79. fortunes = []
  80. for row in dbraw_engine.execute("SELECT * FROM Fortune"):
  81. fortunes.append(Fortune(id=row.id, message=row.message))
  82. fortunes.append(Fortune(id=0, message="Additional fortune added at request time."))
  83. fortunes.sort(key=attrgetter('message'))
  84. return render_template('fortunes.html', fortunes=fortunes)
  85. # entry point for debugging
  86. if __name__ == "__main__":
  87. app.run(debug=True)