使用SQLAlchemy生成字符串主键序列

3
在SQA中生成随机字符串密钥相对简单,大致如下:
request_id = Column(String, default=lambda: uuid.uuid4().hex, primary_key=True)

然而,我需要获取格式类似于 DIVISION_ABC_REQUEST_223request_id(这是因为PK也应该方便人类使用——该键将在电子邮件中发送、复制/粘贴等,但它也应该可用于常规的SQA/SQL查询作为典型的PK),最好是整数后缀遵循正常(序数)顺序。

(后端数据库是Postgres)

1个回答

0

我找到了一个解决方案,虽然有点浪费:

class WorkPackage(Base):
    __tablename__ = 'work_package'
    int_id = Column(Integer, primary_key=True)
    wp_prefix = Column(Unicode, default=u'DIVISION_ABC_REQUEST_', primary_key=True)
    data = Column(Unicode)

    @hybrid_property
    def wp_id(self):
        return self.wp_prefix + str(self.int_id)

    @wp_id.expression
    def wp_id(cls):
        return cls.wp_prefix.concat(cls.int_id)

wp_id.expression 使用 concat(一种生成 SQL 连接运算符 ||ColumnOperator)。

它在自动按所需顺序创建 PK 和按 wp_id 属性查询方面运作良好。

然而,愚蠢的一点是显然有一个单独的列一遍又一遍地填充相同的前缀。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接