在SQA中生成随机字符串键相对简单,如:
request_id = Column(String, default=lambda: uuid.uuid4().hex, primary_key=True)
但是,我需要让request_id
具有类似DIVISION_ABC_REQUEST_223
的格式(这是因为PK也应该对人类消费有益 - 该密钥将在电子邮件中发送,复制/粘贴等,但它也应该可用于常规SQA / SQL查询作为典型的PK),理想情况下整数后缀遵循正常(序数)序列。
(后端数据库是Postgres)
答案 0 :(得分: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
的{{1}})。
它的工作方式是按所需顺序自动创建PK,并通过||
属性进行查询。
然而,愚蠢的方面是,显然有一个列一遍又一遍地填充相同的前缀。