执行insert into table报错

报错信息类似:

{"success":false,"error_message":"base xxx not found","results":[],"metadata":[]}

但是我执行update是没问题的,执行的SQL语句参考:

insert into data_report (`日期`, `PV`, `UV`, `新增问题`, `新增回答`, `新增文章`, `新增用户`) values ("2022-07-01", 6, 12, 12, 138, 18, 18)

请求的url参考:

https://dtable-db.seatable.cn/api/v1/query/dtable_uuid

另外,我参考了这个/dtable-db/rows.md 接口报错信息也差不多,大概就是找不到指定uuid

你可以把你完整的代码贴一下。

/**
     * @param $data
     * @param $accessToken
     * @param $dbUrl
     * @param $uuid
     * @return bool
     */
    protected function insertRow($data, $accessToken, $dbUrl, $uuid)
    {
        $sql = sprintf(
            'INSERT INTO data_report (`日期`, `PV`, `UV`, `新增问题`, `新增回答`, `新增文章`, `新增用户`) VALUES ("%s", %d, %d, %d, %d, %d, %d)',
            $data['date'], $data['pv'], $data['uv'], $data['questions'], $data['answers'], $data['articles'], $data['users']
        );
        
        try {
            $url = $dbUrl . 'api/v1/query/' . $uuid;
            $client = new HttpClient($url);
            $client->setHeader('Content-Type', 'application/json')
                ->setHeader('charset', 'utf-8')
                ->setHeader('Authorization', 'Token ' . $accessToken);
            $client->post(json_encode([
                'sql' => $sql,
                'convert_keys' => false
            ]));

            echo $client->getResponseBody();
            $res = json_decode($client->getResponseBody(), true);
            if (count($res['results']) == 1) {
                return true;
            }
            return false;
        } catch (\Throwable $e) {
            return false;
        }
    }

备注,HttpClient是我们自己内部的请求库,忽略掉,核心也是利用curl做的处理;
至于里面相关的参数是通过https://cloud.seatable.cn/api/v2.1/dtable/app-access-token/请求获取的,不会有啥问题,这里的sql语句如果玩换成update或者是select *都没啥问题。

好的,我们分析一下这个问题。

谢谢哈,目前我暂时不知道是为啥,接口设置token的时候是有读写权限的

insert 是直接写入到大数据存储,如果这个表格没有归档过,会出现这个错误。

如果要直接写入表格存储,用 dtable-server 提供的 append row 和 batch append row API:

https://seatable.github.io/seatable-scripts-cn/python/rows/#append-row

https://docs.seatable.cn/published/seatable-api/dtable-server/rows.md

update, delete 都是会自动判断对应的行是在哪个存储中。

1 个赞

我们把对应的文档和错误消息改进一下。

1 个赞

非常感谢,完美的解决了问题,你这个提示消息能直接告知解决方案就好了:joy: