You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Entry类生成跨程序运行的持久化唯一整数ID并存入SQL数据库

实现跨运行一致的Entry对象唯一整数ID

没问题!要实现这个跨运行一致的唯一整数ID,核心思路是基于title、content、kw这三个字段的内容生成稳定的哈希值——毕竟id()只跟对象内存地址绑定,重启程序就失效了,完全不符合你的需求。我给你两种可行方案,根据你的场景选就行:

方案一:快速实现(单环境跨运行一致)

如果你的程序只会在同一个Python环境(相同版本、相同操作系统)下运行,用Python内置的hash()函数就足够简单。关键是把三个字段组合成一个可哈希的不可变对象(比如元组),再计算哈希值:

class Entry:
    def __init__(self, title, content, kw):
        self.title = title
        self.content = content
        # 注意:如果kw是列表这类可变对象,必须转成元组保证可哈希
        self.kw = tuple(kw) if isinstance(kw, list) else kw

    def get_unique_id(self):
        # 把三个字段打包成元组,计算哈希值作为唯一ID
        return hash((self.title, self.content, self.kw))

注意事项:

  • hash()的结果在不同Python版本、不同操作系统之间可能不一致,如果需要跨环境通用,别用这个方案。
  • 所有参与哈希的字段必须是可哈希类型(比如字符串、元组、数字),如果是可变对象(列表、字典),一定要先转成不可变形式。

方案二:跨环境稳定实现(推荐)

如果需要在不同Python版本、甚至不同语言程序之间生成一致的ID,就得用标准化的哈希算法(比如SHA-256),把字段内容转成字节串后计算哈希,再转成整数:

import hashlib
import json

class Entry:
    def __init__(self, title, content, kw):
        self.title = title
        self.content = content
        self.kw = kw

    def get_unique_id(self):
        # 统一把所有字段转成字节串,编码用utf-8避免乱码
        def serialize_field(value):
            if isinstance(value, (dict, list)):
                # 字典要排序键,保证不同顺序的同内容字典生成相同字节串
                return json.dumps(value, sort_keys=True, ensure_ascii=False).encode('utf-8')
            elif isinstance(value, str):
                return value.encode('utf-8')
            elif value is None:
                # 统一处理None值,避免不同序列化方式的差异
                return b'None'
            else:
                # 其他类型转成字符串再编码
                return str(value).encode('utf-8')

        # 拼接所有字段的字节数据
        combined_data = b''.join([
            serialize_field(self.title),
            serialize_field(self.content),
            serialize_field(self.kw)
        ])

        # 用SHA-256生成哈希摘要
        hash_obj = hashlib.sha256(combined_data)
        # 把十六进制摘要转成整数,再对2^64取模(适配数据库BIGINT类型)
        return int(hash_obj.hexdigest(), 16) % (2 ** 64)

优势:

  • 不管Python版本、操作系统是什么,只要三个字段的内容完全相同,生成的整数ID就绝对一致。
  • 可以轻松扩展到其他语言,只要用相同的哈希算法和序列化规则就行。

数据库适配:

生成的ID是64位整数,数据库里可以用BIGINT(MySQL)或者BIGINT UNSIGNED(如果不需要负数)来存储,完全能满足唯一标识符的需求。

内容的提问来源于stack exchange,提问作者izaak_pyzaak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:59:01