在我从事的一个项目中,这个问题发生过几次,尽管我使用了我在这个网站上找到的“python manage . py sqlsequencereset”修复程序,它工作了一段时间,然后又开始抛出错误。
我一直得到的错误非常简单:
IntegrityError at /projects/v/portola/planting-sites/new/
duplicate key value violates unique constraint "urbanforest_plantingsite_pkey"
DETAIL: Key (id)=(194016) already exists.
在我看来,我有:
form = PlantingSiteForm(request.POST)
if form.is_valid():
f = form.save(commit=False)
if PlantingSite.objects.all().exists():
last_planting_site = PlantingSite.objects.all().order_by('-created_at')[0]
f.id_planting_site = last_planting_site.id_planting_site
f.id_planting_site += 1
else:
f.id_planting_site = 100000
if request.POST.get('neighborhood_id'):
f.neighborhood = Neighborhood.objects.filter(id_neighborhood=request.POST.get('neighborhood_id'))[0]
if request.POST.get('district_id'):
f.district = District.objects.filter(id_district=request.POST.get('district_id'))[0]
if request.POST.get('basin_type_id'):
f.basin_type = BasinType.objects.filter(id_basin_type=request.POST.get('basin_type_id'))[0]
if request.POST.get('aspect_id'):
f.aspect = Aspect.objects.filter(id_aspect=request.POST.get('aspect_id'))[0]
if request.POST.get('orientation_id'):
f.orientation = Orientation.objects.filter(id_orientation=request.POST.get('orientation_id'))[0]
if request.POST.get('hardscape_damage_id'):
f.hardscape_damage = HardscapeDamage.objects.filter(id_hardscape_damage=request.POST.get('hardscape_damage_id'))[0]
if request.POST.get('status_id'):
f.status = PlantingSiteStatus.objects.filter(id_planting_site_status=request.POST.get('status_id'))[0]
else:
f.status = PlantingSiteStatus.objects.filter(id_planting_site_status=9)[0]
if f.zipcode:
f.property_zipcode = f.zipcode
f.created_by_fuf = True
f.created_by = request.user
f.save()
我现在已经做了几次sqlequence重置,然后错误在几周后返回。我没有导入任何数据,但我的同事正在现场使用他们的手机创建新对象,一次一个。
运行sqlsequencereset会得到以下代码:
SELECT setval(pg_get_serial_sequence('"urbanforest_plantingsite"','id'), coalesce(max("id"), 1), max("id") IS NOT null) FROM "urbanforest_plantingsite";
我应该运行更具体的东西吗?我不太熟悉Postgres,因为我只是使用Django命令来处理所有数据库调用。
编辑:需要补充的一点是,我发现运行sqlsequencereset会生成调整sql调用的代码,但实际上并没有运行它。所以我运行了:<br>python管理。py-sqlsequencereset-urbanforest|python-manage。py dbshell注入代码并重建表。
不幸的是,几分钟后我收到了同样的错误。
所以我通过将站点创建转移到while循环中来解决这个问题(至少目前如此)。我认为问题在于Django如何使用模型表单创建对象。因为您创建了对象并用form.save(commit=False)将它保存到内存中,所以您可能会遇到问题,因为它在将对象提交到数据库之前将那些其他字段添加到对象中。
所以现在,至少,这已经解决了这个问题:
while True:
try:
form = PlantingSiteForm(request.POST)
if form.is_valid():
f = form.save(commit=False)
if PlantingSite.objects.all().exists():
last_planting_site = PlantingSite.objects.all().order_by('-created_at')[0]
f.id_planting_site = last_planting_site.id_planting_site
f.id_planting_site += 1
else:
f.id_planting_site = 100000
if request.POST.get('neighborhood_id'):
f.neighborhood = Neighborhood.objects.filter(id_neighborhood=request.POST.get('neighborhood_id'))[0]
if request.POST.get('district_id'):
f.district = District.objects.filter(id_district=request.POST.get('district_id'))[0]
if request.POST.get('basin_type_id'):
f.basin_type = BasinType.objects.filter(id_basin_type=request.POST.get('basin_type_id'))[0]
if request.POST.get('aspect_id'):
f.aspect = Aspect.objects.filter(id_aspect=request.POST.get('aspect_id'))[0]
if request.POST.get('orientation_id'):
f.orientation = Orientation.objects.filter(id_orientation=request.POST.get('orientation_id'))[0]
if request.POST.get('hardscape_damage_id'):
f.hardscape_damage = HardscapeDamage.objects.filter(id_hardscape_damage=request.POST.get('hardscape_damage_id'))[0]
if request.POST.get('status_id'):
f.status = PlantingSiteStatus.objects.filter(id_planting_site_status=request.POST.get('status_id'))[0]
else:
f.status = PlantingSiteStatus.objects.filter(id_planting_site_status=9)[0]
if f.zipcode:
f.property_zipcode = f.zipcode
f.created_by_fuf = True
f.created_by = request.user
f.save()
except IntegrityError:
sleep(random.uniform(0.001, 0.5)) # chill out, try again
messages.success(request, "Still creating previous site, trying again...")
continue
因此,它尝试创建对象,如果由于完整性错误而失败,它将Hibernate一秒钟,然后重试。到目前为止,一切都很好,我的同事正在现场使用它,我还没有看到任何错误。
问题内容: 我正在跟着我先前提出的一个问题,在这个问题中,我试图寻求从愚蠢/编写不佳的mysql查询到postgresql的转换。我相信我成功了。无论如何,我正在使用从mysql数据库手动移动到postgres数据库的数据。我正在使用如下查询: 我有理由相信这很好。但是,这导致了新问题。尝试提交时,我从django收到一条错误,指出: 我已经看过这里发布的一些回复,但是我还没有找到解决我的问题的方
我有一个笑话模型: 现在,当我试图迁移最后一行时,我得到了错误。基本上,我想将一个用户链接到Joke对象,因为我已经有了一个数据库,所以我希望默认值为1,这是管理员用户的id(我检查过了...).Makemigrations工作正常,但是当我尝试迁移时,我得到了这个: 我真的不明白怎么了。有什么想法吗?
我有这样的桌子: 我试图插入一些查询到另一个表(device_usage_test1)。这是我的表: 这是我的插入命令: 稍后,我将在device_usage_test1上创建一个插入查询。所以我的设备序列必须是唯一的。但是当我尝试用deviceserial (unique)插入时。它显示错误:< code >错误:重复的键值违反了唯一约束“device _ usage _ device seri
我在创建应用程序时遇到了这个问题。因此,每当我添加第一条评论时,问题都不会出现,但当我第二次尝试时,我会收到此错误: 重复的键值违反了唯一约束“tripplanner_discussion_author_id_key”详细信息:键 (author_id)=(1) 已存在。 我试图把放到 models.py,但它根本没有帮助。 models.py views.py 更新 当我登录到另一个用户时,一个
如果存在,上面的代码通过按用户名搜索来获取用户,如果不存在,则创建一个新对象,并更新其属性并将其保存回数据库。 理想情况下,该代码应该处理对象已经存在于数据库中的情况。但它抛出了以下错误: 我不明白这是为什么。在互联网上搜索,发现这可能是因为指数被破坏,并已重置序列,但无法找到确切的原因和解决方案。请帮我做这件事。预先感谢
我在django应用程序中创建了一个模型,并从pgadmin将数据填充到表中,但现在当我试图从应用程序创建记录时,它抛出了这个完整性错误: 重复的键值违反了唯一约束“packsapp_foo_pkey” 详细信息:键(id)=(4)已经存在。 这是models.py 我是否总是必须从应用程序本身插入数据? Views.py