gpt4 book ai didi

python - django.db.utils.IntegrityError : NOT NULL constraint failed: unesco_site. category_id

转载 作者:行者123 更新时间:2023-12-04 08:56:43 30 4
gpt4 key购买 nike

我正在尝试使用 python 脚本从 csv 文件中的数据填充数据库。我做了一些研究,但找不到相关示例,而是找到了可以加载 csv 的 python 包。还有一些关于如何上传 csv 文件的文章,这不是我想要的。
以下是load.csv的一瞥文件。如您所见,有 11 列。

# models.py
from django.db import models


class Category(models.Model):
category = models.CharField(max_length=128)

def __str__(self):
return self.name

class State(models.Model):
state = models.CharField(max_length=25)

def __str__(self):
return self.name


class Region(models.Model):
region = models.CharField(max_length=25)

def __str__(self):
return self.region

class Iso(models.Model):
iso = models.CharField(max_length=5)

def __str__(self):
return self.iso

class Site(models.Model):
name = models.CharField(max_length=128)
year = models.IntegerField(null=True)
area = models.FloatField(null=True)
describe = models.TextField(max_length=500)
justify = models.TextField(max_length=500, null=True)
longitude = models.TextField(max_length=25, null=True)
latitude = models.TextField(max_length=25, null=True)

#one to many field
category = models.ForeignKey(Category, on_delete=models.CASCADE)
state = models.ForeignKey(State, on_delete=models.CASCADE)
region = models.ForeignKey(Region, on_delete=models.CASCADE)
iso = models.ForeignKey(Iso, on_delete=models.CASCADE)

def __str__(self):
return self.name
我无法在插入数据时建立模型之间的关系。早些时候,我用过 get_or_create()方法,但我被建议不要使用它,因为我没有 default要给出和使用的值 create()方法。在某处我发现,在保存数据之前不会生成主键,因此我每次在读取数据后都尝试将数据保存到该字段,但这也不起作用。 .以下是 many_load.py 脚本中的代码。读取数据没有问题。
import csv 

#python3 manage.py runscript many_load

from unesco.models import Site, Category, Iso, Region, State

def run():
fhand = open('unesco/load.csv')
reader = csv.reader(fhand)
next(reader)


# Category.objects.all().delete()
# Iso.objects.all().delete()
# Region.objects.all().delete()
# State.objects.all().delete()

# Site.objects.all().delete()


for row in reader:
# print(row)
# print (len(row))

nm= Site.objects.create(name=row[0])
dsc = Site.objects.create(describe=row[1])
jst = Site.objects.create(justify=row[2])
yr = Site.objects.create(year=row[3])
lng = Site.objects.create(longitude=row[4])
lat = Site.objects.create(latitude=row[5])
area = Site.objects.create(area=row[6])


st = Site(category=row[7], state=row[8], region=row[9], iso=row[10],
name=nm, area=area, describe=dsc, justify=jst, longitude=lng, latitude=lat)
st.save()
但是当我尝试运行脚本时 python3 manage.py runscript many_load它给了我以下错误。请帮忙。你也可以给我推荐一些很好的文章来了解更多。
Traceback (most recent call last):
File "/home/bu113t/envs/djpro/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "/home/bu113t/envs/djpro/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 413, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: NOT NULL constraint failed: unesco_site.category_id

最佳答案

发生此错误是因为您将字符串值传递给 category领域Site但它期待一个 Category对象,因为它是 ForeignKey field 。
不仅是您在 many_load.py 中还有其他问题
以下代码修正了所有问题。希望它对你有用。

import csv

# python3 manage.py runscript many_load

from unesco.models import Site, Category, Iso, Region, State


def run():
fhand = open('unesco/load.csv')
reader = csv.reader(fhand)
next(reader)

# Category.objects.all().delete()
# Iso.objects.all().delete()
# Region.objects.all().delete()
# State.objects.all().delete()

# Site.objects.all().delete()

for row in reader:
# print(row)
# print (len(row))

nm = row[0]
dsc = row[1]
jst = row[2]
yr = row[3]
lng = row[4]
lat = row[5]
area = row[6]

category = Category.objects.create(category=row[7])
state = State.objects.create(state=row[8])
region = Region.objects.create(region=row[9])
iso = Iso.objects.create(iso=row[10])

st = Site(category=category, state=state, region=region, iso=iso,
name=nm, area=area, describe=dsc, justify=jst, longitude=lng, latitude=lat)
st.save()

关于python - django.db.utils.IntegrityError : NOT NULL constraint failed: unesco_site. category_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63786895/

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