Django:重复的键值违反唯一约束与Postgresql不与SQlite -> 为什么?

问题描述 投票:0回答:1

我刚刚用Postgresql数据库部署了我的项目,并得到一个错误的唯一约束违反了我没有与我的sqlite开发数据库。

IntegrityError at randomization_settingsedit重复的键值违反了唯一约束 "adm_bra_pkey "DETAIL。 键(bra_ide)=(1)已经存在。

我有一个表(adm_bra)预填充了2行。

我试图在视图中使用models.objects.create()方法用代码插入新行。

为什么这种情况发生在postgresql而不是sqlite数据库?

谢谢你的帮助

EDITI已经做了一些测试,首先我重新初始化我的表。

DELETE FROM adm_bra;
ALTER SEQUENCE adm_pro_pro_ide_seq RESTART WITH 1;
INSERT INTO adm_bra ("bra_ide","ran_st1","ran_st2","bra_00A_act","bra_00A_lib","bra_00B_act","bra_00B_lib","bra_00C_act","bra_00C_lib","bra_00D_act","bra_00D_lib","bra_log","bra_dat","pay_ide_id") 
VALUES (1,1,1,1,'HCQ+LPV/r',1,'HCQ+DRV/r',1,'LPV/r+TMS',1,'LPV/r+ATS','admin',now(),1);
INSERT INTO adm_bra ("bra_ide","ran_st1","ran_st2","bra_00A_act","bra_00A_lib","bra_00B_act","bra_00B_lib","bra_00C_act","bra_00C_lib","bra_00D_act","bra_00D_lib","bra_log","bra_dat","pay_ide_id") 
VALUES (2,2,1,1,'HCQ+LPV/r',1,'HCQ+DRV/r',1,'LPV/r+TMS',1,'LPV/r+ATS','admin',now(),1);

如果我尝试执行这段代码,我得到了唯一约束的错误。

Bras.objects.create(
                ran_st1 = 1, 
                ran_st2 = 1,
                bra_00A_act = 1, 
                bra_00A_lib = 'HCQ+LPV/r', 
                bra_00B_act = 1, 
                bra_00B_lib = 'HCQ+DRV/r', 
                bra_00C_act = 1, 
                bra_00C_lib = 'LPV/r+TMS', 
                bra_00D_act = None, 
                bra_00D_lib = None, 
                bra_00E_act = None, 
                bra_00E_lib = None, 
                bra_00F_act = None, 
                bra_00F_lib = None, 
                bra_00G_act = None, 
                bra_00G_lib = None, 
                bra_00H_act = None, 
                bra_00H_lib = None, 
                bra_00I_act = None, 
                bra_00I_lib = None, 
                bra_00J_act = None, 
                bra_00J_lib = None, 
                bra_dat = timezone.now(), 
                bra_log = 'admin', 
                pay_ide_id = 2
            )

但是,如果执行这个代码,它的工作。

b= Bras(           ran_st1 = 1,ran_st2 = 1,
                bra_00A_act = 1,
                bra_00A_lib = 'HCQ+LPV/r', 
                bra_00B_act = 1,
                bra_00B_lib = 'HCQ+DRV/r', 
                bra_00C_act = 1, 
                bra_00C_lib = 'LPV/r+TMS', 
                bra_00D_act = None, 
                bra_00D_lib = None, 
                bra_00E_act = None, 
                bra_00E_lib = None, 
                bra_00F_act = None, 
                bra_00F_lib = None, 
                bra_00G_act = None, 
                bra_00G_lib = None, 
                bra_00H_act = None, 
                bra_00H_lib = None, 
                bra_00I_act = None, 
                bra_00I_lib = None, 
                bra_00J_act = None, 
                bra_00J_lib = None, 
                bra_dat = timezone.now(), 
                bra_log = 'admin', 
                pay_ide_id = 2
            )
b.save()
Bras.objects.create(
                ran_st1 = 1, 
                ran_st2 = 1,
                bra_00A_act = 1, 
                bra_00A_lib = 'HCQ+LPV/r', 
                bra_00B_act = 1, 
                bra_00B_lib = 'HCQ+DRV/r', 
                bra_00C_act = 1, 
                bra_00C_lib = 'LPV/r+TMS', 
                bra_00D_act = None, 
                bra_00D_lib = None, 
                bra_00E_act = None, 
                bra_00E_lib = None, 
                bra_00F_act = None, 
                bra_00F_lib = None, 
                bra_00G_act = None, 
                bra_00G_lib = None, 
                bra_00H_act = None, 
                bra_00H_lib = None, 
                bra_00I_act = None, 
                bra_00I_lib = None, 
                bra_00J_act = None, 
                bra_00J_lib = None, 
                bra_dat = timezone.now(), 
                bra_log = 'admin', 
                pay_ide_id = 2
            )

django postgresql unique-constraint
1个回答
1
投票

其实你是用1重新开始序列,然后在你的查询中,你是手动传递bra_ide的值。所以,当你执行这些查询时,序列并没有被用来创建默认列。当你尝试插入时,序列提供了一个1的值,因为它是第一次运行,你得到一个完整性错误。

当运行查询时,删除bra_ide列及其值。所以你的序列将自动生成值。

© www.soinside.com 2019 - 2024. All rights reserved.