0

我正在尝试在我的 python 项目(python 3.8)中使用 MySQL 8 的文档存储。MySQL-connector python 的版本是 8.0.20。根据API 参考X DevAPI 用户指南,我尝试在将文档添加到数据库后获取自动递增文档 ID。每次执行后,数据都会成功插入DB,但调用get_autoincrement_value()后会返回'-1'。

我的代码如下所示:

    try:
        schema = session.get_schema('my_schema')
        collection = schema.get_collection('my_collection')
        topic_dict = protobuf_to_dict(topic)
        doc_id = collection.add(topic_dict).execute().get_autoincrement_value()
        logger.debug('doc_id: {}', doc_id)
        return doc_id
    except Exception as e:
        logger.exception("failed to add topic to db, topic: {}, err: {}", topic, e)

我的用法有什么问题吗?谢谢大家~

4

1 回答 1

1

似乎您对自动生成的文档 ID 感兴趣。如果是这种情况,您应该改用get_generated_ids

doc_id = collection.add(topic_dict).execute().get_generated_ids()[0]

在这种情况下,该方法返回在操作范围内生成的所有 id 的列表add()

文档可能不够清晰,但get_auto_increment_value()仅包含有用数据,如果您要插入一行,session.sql()或者table.insert()在包含AUTO_INCREMENT列的表上插入一行。它在 NoSQL 集合的范围内没有任何意义,因为最终集合只是一个创建的表,如下所示(精简版):

CREATE TABLE collection (
  `doc` json DEFAULT NULL,
  `_id` varbinary(32),
  PRIMARY KEY (`_id`)
)

这意味着没有任何东西可以“自动递增”。

免责声明:我是 MySQL X DevAPI Connector for Node.js 的主要开发人员

于 2020-07-22T16:56:30.750 回答