странная ошибка, когда я использовал asyncpg в моем приложении aiohttp - PullRequest
0 голосов
/ 08 мая 2020

Я начал разрабатывать свое приложение с помощью aiopg для доступа к данным в postgres, и все было в порядке, я решил заменить его на asyncpg.

это одна из моих функций просмотра:

@router.get('/{post}')
@aiohttp_jinja2.template("view.html")
async def view_post(request):
    ret = {'id':'1','owner':'shooooobi','editor':'shooooobi','title':'new_title','text':'nothing'}

    return {"post":ret}

это простой вид, и все в порядке, но когда я добавил некоторый код asyncpg, как показано ниже, я добавил строку с 4 по 7 строку за строкой и запустил приложение ...

@router.get('/{post}')
@aiohttp_jinja2.template("view.html")
async def view_post(request):
    pg  = request.config_dict["PG"]
    post_id = request.match_info["post"]
    con = pg.acquire()
    cur = con.cursor('SELECT id, owner, editor, title, text FROM mshma.posts where id=$1',post_id)
    ret = {'id':'1','owner':'shooooobi','editor':'shooooobi','title':'new_title','text':'nothing'}

    return {"post":ret}

строка 7, потому что я получил следующий текст на моей веб-странице.

context should be mapping, not <class 'set'>

когда я комментирую эту строку (строка 7), моя функция просмотра работает должным образом. в чем проблема ??

Ответы [ 2 ]

0 голосов
/ 13 мая 2020

выполнить этот запрос не удалось, поскольку столбец идентификатора параметра является целым числом, а параметр post_id - строкой, ошибки не будут отображаться при использовании шаблона jinja2 !!. нам просто нужно преобразовать post_id в целое число (int(post_id))

0 голосов
/ 08 мая 2020

Вам необходимо использовать await для asyn c вызовов; вот отрывок о том, как получить соединение из пула, запустить запрос и освободить соединение обратно в пул

conn = await pg.acquire()
try:
    result = await conn.fetchrow("SELECT id, owner, editor, title, text FROM mshma.posts where id=$1", post_id)
finally:
    await pg.release(conn)
# do something with result (which is an asyncpg.Record object)

...