From df0e285b6f8465eb273af50c242299c5601fa09f Mon Sep 17 00:00:00 2001 From: lizheao Date: Wed, 15 Mar 2017 14:12:37 +0800 Subject: [PATCH] Add a new example --- examples/sanic_aiomysql_with_global_pool.py | 63 +++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 examples/sanic_aiomysql_with_global_pool.py diff --git a/examples/sanic_aiomysql_with_global_pool.py b/examples/sanic_aiomysql_with_global_pool.py new file mode 100644 index 00000000..8158a87b --- /dev/null +++ b/examples/sanic_aiomysql_with_global_pool.py @@ -0,0 +1,63 @@ +# encoding: utf-8 +""" +You need the aiomysql +""" +import asyncio +import os + +import aiomysql +import uvloop +from sanic import Sanic +from sanic.response import json + +database_name = os.environ['DATABASE_NAME'] +database_host = os.environ['DATABASE_HOST'] +database_user = os.environ['DATABASE_USER'] +database_password = os.environ['DATABASE_PASSWORD'] +app = Sanic() +asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) + + +async def get_pool(*args, **kwargs): + """ + the first param in *args is the global instance , + so we can store our connection pool in it . + and it can be used by different request + :param args: + :param kwargs: + :return: + """ + args[0].pool = { + "aiomysql": await aiomysql.create_pool(host=database_host, user=database_user, password=database_password, + db=database_name, + maxsize=5)} + async with args[0].pool['aiomysql'].acquire() as conn: + async with conn.cursor() as cur: + await cur.execute('DROP TABLE IF EXISTS sanic_polls') + await cur.execute("""CREATE TABLE sanic_polls ( + id serial primary key, + question varchar(50), + pub_date timestamp + );""") + for i in range(0, 100): + await cur.execute("""INSERT INTO sanic_polls + (id, question, pub_date) VALUES ({}, {}, now()) + """.format(i, i)) + + +@app.route("/") +async def test(): + result = [] + data = {} + async with app.pool['aiomysql'].acquire() as conn: + async with conn.cursor() as cur: + await cur.execute("SELECT question, pub_date FROM sanic_polls") + async for row in cur: + result.append({"question": row[0], "pub_date": row[1]}) + if result or len(result) > 0: + data['data'] = res + return json(data) + + +if __name__ == '__main__': + app.run(host="127.0.0.1", workers=4, port=12000, before_start=get_pool)