2016-12-11 12:21:02 +00:00
|
|
|
""" To run this example you need additional aiopg package
|
|
|
|
|
|
|
|
"""
|
2016-12-11 11:43:31 +00:00
|
|
|
import os
|
|
|
|
import asyncio
|
|
|
|
|
|
|
|
import uvloop
|
|
|
|
import aiopg
|
|
|
|
|
|
|
|
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']
|
|
|
|
|
2016-12-11 12:14:03 +00:00
|
|
|
connection = 'postgres://{0}:{1}@{2}/{3}'.format(database_user,
|
|
|
|
database_password,
|
|
|
|
database_host,
|
|
|
|
database_name)
|
2016-12-11 11:43:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
async def get_pool():
|
|
|
|
return await aiopg.create_pool(connection)
|
|
|
|
|
|
|
|
app = Sanic(name=__name__)
|
|
|
|
|
2017-01-22 02:26:32 +00:00
|
|
|
async def prepare_db(app, loop):
|
2016-12-11 11:43:31 +00:00
|
|
|
"""
|
2017-01-22 02:26:32 +00:00
|
|
|
Let's create some table and add some data
|
|
|
|
"""
|
|
|
|
async with aiopg.create_pool(connection) as pool:
|
|
|
|
async with pool.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))
|
2016-12-11 11:43:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
@app.route("/")
|
|
|
|
async def handle(request):
|
2017-01-22 02:26:32 +00:00
|
|
|
result = []
|
|
|
|
async def test_select():
|
|
|
|
async with aiopg.create_pool(connection) as pool:
|
|
|
|
async with pool.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]})
|
|
|
|
res = await test_select()
|
|
|
|
return json({'polls': result})
|
2016-12-11 11:43:31 +00:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
2017-01-22 02:26:32 +00:00
|
|
|
app.run(host='0.0.0.0',
|
|
|
|
port=8000,
|
|
|
|
debug=True,
|
|
|
|
before_start=prepare_db)
|