add sanic aiopg example with raw sql
This commit is contained in:
parent
e3453553e1
commit
154f8570f0
58
examples/sanic_aiopg_example.py
Normal file
58
examples/sanic_aiopg_example.py
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
import os
|
||||||
|
import asyncio
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
import uvloop
|
||||||
|
import aiopg
|
||||||
|
|
||||||
|
from sanic import Sanic
|
||||||
|
from sanic.response import json
|
||||||
|
|
||||||
|
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
|
||||||
|
|
||||||
|
database_name = os.environ['DATABASE_NAME']
|
||||||
|
database_host = os.environ['DATABASE_HOST']
|
||||||
|
database_user = os.environ['DATABASE_USER']
|
||||||
|
database_password = os.environ['DATABASE_PASSWORD']
|
||||||
|
|
||||||
|
connection = 'postgres://{0}:{1}@{2}/{3}'.format(database_user, database_password, database_host, database_name)
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
|
||||||
|
|
||||||
|
async def get_pool():
|
||||||
|
return await aiopg.create_pool(connection)
|
||||||
|
|
||||||
|
app = Sanic(name=__name__)
|
||||||
|
pool = loop.run_until_complete(get_pool())
|
||||||
|
|
||||||
|
|
||||||
|
async def prepare_db():
|
||||||
|
""" Let's create some table and add some data
|
||||||
|
|
||||||
|
"""
|
||||||
|
async with pool.acquire() as conn:
|
||||||
|
async with conn.cursor() as cur:
|
||||||
|
await cur.execute("""CREATE TABLE sanic_poll (
|
||||||
|
id integer primary key,
|
||||||
|
question varchar(50),
|
||||||
|
pub_date timestamp
|
||||||
|
);""")
|
||||||
|
for i in range(0, 100):
|
||||||
|
await cur.execute("""INSERT INTO sanic_poll (id, question, pub_date) VALUES ({}, {}, now())
|
||||||
|
""".format(i, i))
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/")
|
||||||
|
async def handle(request):
|
||||||
|
async with pool.acquire() as conn:
|
||||||
|
async with conn.cursor() as cur:
|
||||||
|
result = []
|
||||||
|
await cur.execute("SELECT question, pub_date FROM sanic_poll")
|
||||||
|
async for row in cur:
|
||||||
|
result.append({"question": row[0], "pub_date": row[1]})
|
||||||
|
return json({"polls": result})
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
loop.run_until_complete(prepare_db())
|
||||||
|
app.run(host="0.0.0.0", port=8100, workers=3, loop=loop)
|
Loading…
Reference in New Issue
Block a user