gpt4 book ai didi

python - 如何修复 django.db.utils.IntegrityError : duplicate key value violates unique constraint?

转载 作者:行者123 更新时间:2023-11-28 22:49:43 24 4
gpt4 key购买 nike

我收到以下错误:

django.db.utils.IntegrityError: duplicate key value violates unique constraint "record_coordinates_lat_lon_created_by_id_key"
DETAIL: Key (lat, lon, created_by_id)=(34.84000015258789, -111.80000305175781, 2) already exists.

背景:到目前为止,我一直在使用 MySQL 和 Django 1.4.3。现在我已经安装了 Postgres 9.3 和 Psycopg2 2.5.2。验证和 Syncdb 工作正常。未安装南方。

我运行了一个脚本(适用于 MySQL)。该脚本循环遍历 GPS 文件并将纬度/经度数据保存在坐标表中。

_coordinates, coordinates_created = Coordinates.objects.get_or_create(
lat=round(group[u'lat'], Coordinates.max_decimal_places),
lon=round(group[u'lon'], Coordinates.max_decimal_places),
created_by=self._user,
modified_by=self._user,
date_created=datetime.now(), # See Update 2 addition below.
)

我在模型定义中有一个 unique_together = ('lat', 'lon', ) 约束。一些坐标是相同的(因此使用 get_or_create())。我发现自己摸不着头脑,因为它应该“获取”坐标而不是尝试“创建”新坐标。

这个站点上关于 Postgres 和 Django 的大多数问题几乎都不可避免地提到了 South。我需要南方吗,还是这里发生了其他事情?我只是想在不安装迁移的情况下进行快速而肮脏的测试。

更新 1:我尝试的其他方法是运行:SELECT setval('django_content_type_id_seq', (SELECT MAX(id) FROM django_content_type));suggestion of another post 上的 Postgres 中.错误仍然存​​在。

更新 2:好吧,我没有意识到我需要将我所有的坐标字段都放在默认字典中。坐标模型包含另一个字段 'date_created=models.DateTimeField(auto_now_add=True)'

我找到了以下 blog post这似乎解释了当您使用“auto_now_add=True”时 get_or_create() 中断。现在最大的问题是如何在不破坏 get_or_create() 的情况下使用 auto_now_add?

最佳答案

这回答了我的问题。

_coordinates, coordinates_created = Coordinates.objects.get_or_create(            
lat=Decimal(group[u'lat'])._rescale(-Coordinates.max_decimal_places, 'ROUND_HALF_EVEN'),
lon=Decimal(group[u'lon'])._rescale(-Coordinates.max_decimal_places, 'ROUND_HALF_EVEN'),
created_by=self._user,
modified_by=self._user,
)

auto_nowauto_now_add很好。事实证明,我所有的默认值都已在模型上定义。

问题是 group[u'lat']group[u'lon']当我将它们放入字典时,它们都被转换为 float 。相比之下,latlon都定义为 DecimalFields() .

当使用 MySQL 时,我可以将这些浮点值与数据库的内容进行比较。但是,当我使用 Postgres 时 get() get_or_create()的一部分尝试将数据库中的 Decimal 值与我提供的浮点值进行比较。类型被更强烈地解释,并且在比较期间不会将 float 转换为 Decimal。

在我的调试器中,我看到:

{Decimal}lat
{float}group[lat]

如果django 能产生像TypeError: Can't compare Decimal with float. 这样的明确错误就好了

关于python - 如何修复 django.db.utils.IntegrityError : duplicate key value violates unique constraint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23439971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com