Как вернуть первичный ключ вновь вставленной строки, используя asyncpg?

Я хотел сделать что-то вроде этого:

    async with app.pg_pool.acquire() as pg:
        uid = await pg.execute('INSERT INTO users (created, keyed, key, email) '
                               'VALUES ($1, $2, $3, $4) RETURNING id',
                               time, time, key, rj['email'])['id']

тем не мение Connection.execute кажется, не возвращает ничего, кроме статуса:

https://magicstack.github.io/asyncpg/current/api/index.html?highlight=returning

В противном случае вопрос можно сформулировать так: как мне получить ответ RETURNING заявление при использовании asyncpg?

2 ответа

Решение

Просто используйте Connection.fetchval() вместо execute(),

Вернет статус INSERT. Если вам нужны Record, Records или Value, используйте одно из следующих вместо Connection.execute :

  1. Connection.fetchval- возвращает только значение одного указанного поля. Возврат null если поля не указаны.
  2. Connection.fetch- вернет массив. Каждый dict будет иметь список полей, указанных после утверждения.
  3. Connection.fetchrow - вернет dict со списком полей, указанным после RETURNING утверждение
Другие вопросы по тегам