""" To run this example you need additional asyncpg package """ import os import asyncio import uvloop from asyncpg import create_pool from sanic import Sanic from sanic.response import json asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) DB_CONFIG = { 'host': '', 'user': '', 'password': '', 'port': '', 'database': '' } def jsonify(records): """ Parse asyncpg record response into JSON format """ return [{key: value for key, value in zip(r.keys(), r.values())} for r in records] loop = asyncio.get_event_loop() async def make_pool(): return await create_pool(**DB_CONFIG) app = Sanic(__name__) pool = loop.run_until_complete(make_pool()) async def create_db(): """ Create some table and add some data """ async with pool.acquire() as connection: async with connection.transaction(): await connection.execute('DROP TABLE IF EXISTS sanic_post') await connection.execute("""CREATE TABLE sanic_post ( id serial primary key, content varchar(50), post_date timestamp );""") for i in range(0, 100): await connection.execute(f"""INSERT INTO sanic_post (id, content, post_date) VALUES ({i}, {i}, now())""") @app.route("/") async def handler(request): async with pool.acquire() as connection: async with connection.transaction(): results = await connection.fetch('SELECT * FROM sanic_post') return json({'posts': jsonify(results)}) if __name__ == '__main__': loop.run_until_complete(create_db()) app.run(host='0.0.0.0', port=8000, loop=loop)