首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成没有竞争条件的唯一条形码

生成没有竞争条件的唯一条形码
EN

Stack Overflow用户
提问于 2016-08-17 11:24:21
回答 1查看 479关注 0票数 0

为我们的客户,我需要生成独特的条形码。客户不得有两个相同的条形码。条形码如下:

  • 客户前缀
  • 索引数
  • 校验数字

我希望跟踪每个客户,这是使用的最新索引号码,并在生成条形码时,检索最新的索引编号并将该索引号逐个递增。

当两个进程试图同时生成条形码时,就会出现这个问题。进程A和B都询问最新的索引号,都收到相同的最新索引号,并且都创建了相同的条形码代码。

是否有办法确保即使在异步提供条形码生成时,也不会生成重复的条形码?构建它的系统是Django 1.9,Python3.5有一个PostgreSQL数据库。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-17 11:31:35

这是备份到数据库引擎中的工具之一,那么为此目的使用它怎么样?这是一个序列。它是用于生成主键值的相同工具(在您的情况下,由于某些原因,我假设它不是一个选项,否则只需使用它)。

不幸的是,Django ORM没有处理它,但是您可以直接创建这样的一个:

代码语言:javascript
复制
CREATE SEQUENCE barcodes START WITH 100;

然后,您可以通过从django应用程序执行直接SQL查询来在任何时候使用它:

代码语言:javascript
复制
from django.db import connection

with connection.cursor() as cursor:
    cursor.execute("select nextval('barcodes')")
    barcode = cursor.fetchone()

保证序列是唯一的。请注意,在生成的数字中可能存在空白,因为回滚事务不会“恢复”推进序列。

现在您有一个保证唯一的数字,您可以插入到您的条形码,并保证它的唯一性。

为了方便起见,您可能需要在自定义迁移中创建/删除序列。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38995304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档