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

How to return the Primary Key of the newly inserted row using asyncpg?

我想做这样的事情:

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

但是 Connection.execute 似乎 return 除了状态之外的任何东西:

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

问题可以换句话说:使用 asyncpg 时如何取回 RETURNING 语句的响应?

只需使用 Connection.fetchval() 而不是 execute()

Connection.execute 将 return INSERT 的状态。如果您需要 Record、Records 或 Value,请使用以下其中一项代替 Connection.execute :

  1. Connection.fetchval - returns 仅指定一个字段的值。 Returns null 如果没有指定字段。
  2. Connection.fetch - 将 return 一个 dict 的数组。每个字典都将在 RETURNING 语句之后指定字段列表。
  3. Connection.fetchrow - 将 return 与 RETURNING 语句后指定的字段列表 dict