【问题标题】:How many rows got inserted into SQL database with ts-postgres?使用 ts-postgres 将多少行插入 SQL 数据库?
【发布时间】:2020-06-14 01:30:02
【问题描述】:

我使用ts-postgresINSERT INTO 将新行添加到我的表中。

import { Client } from 'ts-postgres';
let query = '...';
let res = await Client.query(query, [username, email]);

我从Client.query 得到的结果如下:

Result {names: Array(0), rows: Array(0), status: "INSERT 0 1"}
Result {names: Array(0), rows: Array(0), status: "INSERT 0 0"}

在第一种情况下,添加了 1 行,在第二个中添加了 0。我是否真的需要解析 status 字符串才能查看添加了多少行?

【问题讨论】:

    标签: sql node.js postgresql


    【解决方案1】:

    是的,这是你在低级别工作时必须处理的事情(没有 ORM)

    所以这是一个检查插入行的简单函数

    checkInserted(result): number {
      const status = result.status.split();
      return parseInt(status[status.length-1]);
    }
    
    

    您可以根据自己的要求进行定制

    【讨论】:

      【解决方案2】:

      看起来答案是是的,您确实需要解析status 字符串。

      根据Postgres protocol documentation,当数据库执行完一个插入命令时,它会向客户端发送一个CommandComplete 消息。 CommandComplete 消息由一个标识消息类型的字节、一个长度和一个“标记”组成,该标记是一个字符串:

      对于 INSERT 命令,标签是 INSERT oid rows,其中 rows 是 插入的行数。 oid曾经是插入的对象ID 如果rows 为 1 且目标表有 OID,但 OID 系统则为行 不再支持列;因此oid 始终为 0。

      那个标签就是你看到的status。 CommandComplete 消息中没有其他内容。

      Node Postgres 客户端在结果中确实包含一个rowCount 成员,但如果您查看the code,您会发现它只是从字符串中解析出来的。 Java JDBC driver 也解析字符串。

      【讨论】:

        猜你喜欢
        • 2021-08-24
        • 2020-11-07
        • 2021-10-18
        • 2017-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-03
        相关资源
        最近更新 更多