如何使用asyncpg返回新插入行的主键?

时间:2017-11-05 21:56:25

标签: 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#asyncpg.connection.Connection.execute

问题可以用另外的措辞表示:如何在使用asyncpg时取回RETURNING语句的响应?

2 个答案:

答案 0 :(得分:1)

只需使用Connection.fetchval()代替execute()

答案 1 :(得分:0)

Connection.execute 将返回 INSERT 的状态。如果您需要记录、记录或值,请使用以下之一代替 Connection.execute :

  1. Connection.fetchval - 仅返回指定字段的值。如果未指定字段,则返回 null
  2. Connection.fetch - 将返回一个 dict 数组。每个 dict 都有在 RETURNING 语句之后指定的字段列表。
  3. Connection.fetchrow - 将返回带有 dict 语句后指定的字段列表的 RETURNING