为我们的客户,我需要生成独特的条形码。客户不得有两个相同的条形码。条形码如下:
我希望跟踪每个客户,这是使用的最新索引号码,并在生成条形码时,检索最新的索引编号并将该索引号逐个递增。
当两个进程试图同时生成条形码时,就会出现这个问题。进程A和B都询问最新的索引号,都收到相同的最新索引号,并且都创建了相同的条形码代码。
是否有办法确保即使在异步提供条形码生成时,也不会生成重复的条形码?构建它的系统是Django 1.9,Python3.5有一个PostgreSQL数据库。
发布于 2016-08-17 11:31:35
这是备份到数据库引擎中的工具之一,那么为此目的使用它怎么样?这是一个序列。它是用于生成主键值的相同工具(在您的情况下,由于某些原因,我假设它不是一个选项,否则只需使用它)。
不幸的是,Django ORM没有处理它,但是您可以直接创建这样的一个:
CREATE SEQUENCE barcodes START WITH 100;然后,您可以通过从django应用程序执行直接SQL查询来在任何时候使用它:
from django.db import connection
with connection.cursor() as cursor:
cursor.execute("select nextval('barcodes')")
barcode = cursor.fetchone()保证序列是唯一的。请注意,在生成的数字中可能存在空白,因为回滚事务不会“恢复”推进序列。
现在您有一个保证唯一的数字,您可以插入到您的条形码,并保证它的唯一性。
为了方便起见,您可能需要在自定义迁移中创建/删除序列。
https://stackoverflow.com/questions/38995304
复制相似问题