Python Django:使用已操纵的.csv文件保存数据库|错误:“”;值的日期格式无效
我有一个csv文件,它由另一个平台定期更新。我正在尝试将此csv文件导入我的数据库。但csv文件样式(如日期字段、空白字段或选择字段)与django不匹配。所以我需要处理这个文件,然后我要导入到我的数据库中 即使我在我的脚本中编辑了这个csv文件,并且看起来很像csv文件,但是我还是遇到了以下错误 错误Python Django:使用已操纵的.csv文件保存数据库|错误:“”;值的日期格式无效,python,django,django-models,Python,Django,Django Models,我有一个csv文件,它由另一个平台定期更新。我正在尝试将此csv文件导入我的数据库。但csv文件样式(如日期字段、空白字段或选择字段)与django不匹配。所以我需要处理这个文件,然后我要导入到我的数据库中 即使我在我的脚本中编辑了这个csv文件,并且看起来很像csv文件,但是我还是遇到了以下错误 错误 django.core.exceptions.ValidationError: ['“” value has an invalid date format. It must be in YYYY
django.core.exceptions.ValidationError: ['“” value has an invalid date format. It must be in YYYY-MM-DD format.']
还有一个错误
django.core.exceptions.ValidationError: ['“” value has an invalid date format. It must be in YYYY-MM-DD format.']
我的车型
class Personnel(models.Model):
personnnelNumber = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50, null=True, blank=True)
dateEmployment = models.DateField(auto_now=False, auto_now_add=False, null=True, blank=True)
dateTermination = models.DateField(auto_now=False, auto_now_add=False, null=True, blank=True)
cardCode = models.IntegerField(null=True, blank=True)
SapCode = models.IntegerField(null=True, blank=True)
country = models.CharField(max_length=50, null=True, blank=True)
idNo = models.IntegerField(null=True, blank=True)
gender = models.CharField(max_length=50, null=True, blank=True)
birthdate = models.DateField(auto_now=False, auto_now_add=False, null=True, blank=True)
socialNumber = models.IntegerField(null=True, blank=True)
dateEmploymentRD = models.DateField( auto_now=False, auto_now_add=False, null=True, blank=True)
dateTerminationRD = models.DateField(auto_now=False, auto_now_add=False, null=True, blank=True)
task = models.CharField( max_length=50, null=True, blank=True)
workTime = models.IntegerField(choices=((1,'Full Time'),(2,'Part Time')), null=True, blank=True)
graduateLevel = models.CharField( max_length=50, null=True, blank=True)
highSchoolname = models.CharField( max_length=50, null=True, blank=True)
highSchoolfield = models.CharField( max_length=50, null=True, blank=True)
associateSchoolname = models.CharField( max_length=50, null=True, blank=True)
associateSchoolfield = models.CharField( max_length=50, null=True, blank=True)
universityName = models.CharField( max_length=50, null=True, blank=True)
universityField = models.CharField( max_length=50, null=True, blank=True)
masterName = models.CharField( max_length=50, null=True, blank=True)
masterField = models.CharField( max_length=50, null=True, blank=True)
doctorateName = models.CharField( max_length=50, null=True, blank=True)
doctorateField = models.CharField( max_length=50, null=True, blank=True)
department = models.CharField( max_length=50, null=True, blank=True) #Eklenmedi
pypRate = models.DecimalField( max_digits=3, decimal_places=2, null=True, blank=True)
title = models.CharField( max_length=50, blank=True, null=True)
phonenumber = PhoneNumberField(blank=True, null=True)
userImage = models.ImageField( upload_to=None, height_field=None, width_field=None, max_length=None, null=True, blank=True)
def __str__(self):
return self.name
class Meta:
db_table = "Personnel"
ordering = ['name']
他们的RCSV文件
"12648";"ABC XYZ";03/01/12;?;"12648";"12648";"UK";"24350214764";"";?;"";yes;?;?;"RESEARCH";"1";"";yes;no;"";"";"";"";"";"";"";"";"";"";"";1
12648;ABC XYZ;2012-01-03;;12648;12648;UK;24350214764;;;;1;;;RESEARCH;1;;1;2;;;;;;;;;;;;1;
MyCSV文件
"12648";"ABC XYZ";03/01/12;?;"12648";"12648";"UK";"24350214764";"";?;"";yes;?;?;"RESEARCH";"1";"";yes;no;"";"";"";"";"";"";"";"";"";"";"";1
12648;ABC XYZ;2012-01-03;;12648;12648;UK;24350214764;;;;1;;;RESEARCH;1;;1;2;;;;;;;;;;;;1;
我的脚本
def run():
with open(r"TheirCSV.csv", encoding="utf8") as f:
reader = csv.reader(f, delimiter=';', quotechar='"')
nf = open("MyCSV.csv", "w", encoding="utf8")
x =[]
for row in reader:
for i in range(len(row)):
if row[i] == "?":
row[i] = ";"
x.append(row[i])
elif row[i] == 'yes':
row[i] = "1;"
x.append(row[i])
elif row[i] == 'no':
row[i] = "2;"
x.append(row[i])
elif "/" in row[i]:
editedDate = datetime.datetime.strptime(row[i],"%d/%m/%y").strftime("%Y-%m-%d")
row[i] = editedDate
x.append(row[i])
x.append(";")
else:
x.append(row[i])
x.append(";")
x.append("\n")
nf.writelines(x)
nf.close()
f.close()
with open(r"MyCSV.csv", encoding="utf8") as f:
reader = csv.reader(f, delimiter=';', quotechar='"')
Personnel.objects.all().delete()
for row in reader:
print(row)
c = Personnel(personnnelNumber=row[0], name=row[1], dateEmployment=row[2], dateTermination=row[3], cardCode=row[4], SapCode=row[5], country=row[6], idNo=row[7], gender=row[8], birthdate=row[9], socialNumber=row[10], dateEmploymentRD=row[11], dateTerminationRD=row[12], task=row[13], workTime=row[14], graduateLevel=row[15], highSchoolname=row[16], highSchoolfield=row[17], associateSchoolname=row[18], associateSchoolfield=row[19], universityName=row[20], universityField=row[21], masterName=row[22], masterField=row[23], doctorateName=row[24], doctorateField=row[25], department=row[26], pypRate=row[27])
c.save()
我错过了什么?为什么准备好的csv文件看起来不错,Django试图更正字段类型?你能给我指路吗