example06.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. """
  2. example06.py - 异步操作MySQL
  3. """
  4. import json
  5. import aiomysql
  6. import tornado
  7. import tornado.web
  8. from tornado.ioloop import IOLoop
  9. from tornado.options import define, parse_command_line, options
  10. define('port', default=8888, type=int)
  11. async def connect_mysql():
  12. return await aiomysql.connect(
  13. host='1.2.3.4',
  14. port=3306,
  15. db='hrs',
  16. charset='utf8',
  17. use_unicode=True,
  18. user='yourname',
  19. password='yourpass',
  20. )
  21. class HomeHandler(tornado.web.RequestHandler):
  22. async def get(self, no):
  23. async with self.settings['mysql'].cursor(aiomysql.DictCursor) as cursor:
  24. await cursor.execute("select * from tb_dept where dno=%s", (no, ))
  25. if cursor.rowcount == 0:
  26. self.finish(json.dumps({
  27. 'code': 20001,
  28. 'mesg': f'没有编号为{no}的部门'
  29. }))
  30. return
  31. row = await cursor.fetchone()
  32. self.finish(json.dumps(row))
  33. async def post(self, *args, **kwargs):
  34. no = self.get_argument('no')
  35. name = self.get_argument('name')
  36. loc = self.get_argument('loc')
  37. conn = self.settings['mysql']
  38. try:
  39. async with conn.cursor() as cursor:
  40. await cursor.execute('insert into tb_dept values (%s, %s, %s)',
  41. (no, name, loc))
  42. await conn.commit()
  43. except aiomysql.MySQLError:
  44. self.finish(json.dumps({
  45. 'code': 20002,
  46. 'mesg': '添加部门失败请确认部门信息'
  47. }))
  48. else:
  49. self.set_status(201)
  50. self.finish()
  51. def make_app(config):
  52. return tornado.web.Application(
  53. handlers=[(r'/api/depts/(.*)', HomeHandler), ],
  54. **config
  55. )
  56. def main():
  57. parse_command_line()
  58. app = make_app({
  59. 'debug': True,
  60. 'mysql': IOLoop.current().run_sync(connect_mysql)
  61. })
  62. app.listen(options.port)
  63. IOLoop.current().start()
  64. if __name__ == '__main__':
  65. main()