【问题标题】:python mysqlx.Result.get_autoincrement_value() doesn't workpython mysql.Result.get 自动递增值()不起作用
【发布时间】:2020-11-12 01:56:37
【问题描述】:

我正在尝试在我的 python 项目(python 3.8)中使用 MySQL 8 的文档存储。 MySQL-connector python 的版本是 8.0.20。根据API referenceX DevAPI User Guide,我尝试在将文档添加到数据库后获取自动递增文档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)

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

【问题讨论】:

    标签: python mysql python-3.x mysql-8.0 document-storage


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • 非常感谢您的帮助~很高兴能从 MySQL 连接器的核心开发人员之一那里得到答案~:) 是的,我正在尝试提取文档 ID 用于其他用途.这是我第一次尝试 MySQL 文档存储。我将尝试获得更多有关用法的知识,以避免此类愚蠢的问题。我已经尝试过你的建议,效果很好~ :) 再一次,比你好多了~
    猜你喜欢
    • 2013-08-24
    • 2019-10-05
    • 2015-11-22
    • 2013-05-25
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2017-03-09
    相关资源
    最近更新 更多