У меня есть историческая таблица базы данных людей в заданиях, которая включает поля даты начала и окончания.Я вставляю из csv, и мой сценарий работал нормально, за исключением того, что Python / Django видит мои поля None как 'None', и он отказывается вставлять строки с пустыми датами окончания, то есть все текущие рабочие места пропускаются.Это, за исключением части попытки / исключения, не удалось:
except ValidationError as v:
if row['end_date'] == 'null' or 'None' or '':
row['end_date'] = None
, как это было сделано:
except ValidationError as v:
if row['end_date'] in ['null', 'None', '']:
row['end_date'] = None
Я решил проблему, отфильтровав текущие рабочие места и запустив их в отдельномCSV с сценарием, измененным на:
end_date=None
Однако, что мне действительно нужно, так это какой-то способ использовать переменную, например, значение ...
if row[value] == 'None':
row[value] = None
, потому что у меня есть больше CSV дляrun, с другими полями, кроме дат, и некоторые из них также будут иметь пустые значения / значения None.
Заменит ли какой-нибудь вид строки замену работы?
if row[value] == 'None':
row[value].replace(row[value], None)
или, возможно, default =Нет в определении поля end_date в моей модели?Но тогда как мне заставить Django видеть значение по умолчанию вместо пустого / None в csv?Согласно документам, https://docs.djangoproject.com/en/2.2/ref/models/fields/#django.db.models.Field.default «Значение по умолчанию используется, когда создаются новые экземпляры модели, а значение для поля не указывается».Но я не уверен, как это сработало бы здесь.Получу ли я значение по умолчанию или ValidationError?
Наконец, были ли мои попытки исправить это в блоке исключений ошибочными?Каковы пределы того, что может делать блок исключения, чтобы исправить ошибки, а не предупреждать о них, в блоке try?
Спасибо.
РЕДАКТИРОВАТЬ - код -
#! usr/local/bin/python3.7
# coding: utf-8
import csv
import sys
import logging
from os import environ
import django
sys.path.append('/home/malikarumi/Projects/hattie/hattie')
environ['DJANGO_SETTINGS_MODULE'] = 'hattie.settings'
django.setup()
from people.models import Company, Associate, CareerHistory
from django.utils.text import slugify
from django.db import IntegrityError
from django.core.exceptions import ValidationError
from django.contrib.contenttypes.models import ContentType
# logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s:%(name)s:%(message)s')
file_handler = logging.FileHandler('2019-05-13_inserts.txt')
logger.addHandler(file_handler)
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.INFO)
stream_handler = logging.StreamHandler()
logger.addHandler(stream_handler)
stream_handler.setFormatter(formatter)
with open('members6') as csvfile:
reader = csv.DictReader(csvfile, delimiter='\t')
fieldnames = [
'last_name', 'first_name', 'middle_name', 'suffix',
'title', 'start_date', 'end_date'
]
pc = ContentType.objects.get_for_model(Associate)
org = ContentType.objects.get_for_model(Company)
for row in reader:
try:
name_string = row['last_name'], row['first_name'], row['middle_name'], row['suffix']
associate_instance = Associate.objects.create(
last_name=row['last_name'], first_name=row['first_name'],
middle_name=row['middle_name'], suffix=row['suffix'],
slug=slugify(name_string))
CareerHistory.objects.create(
content_type_pc=pc, object_id_pc=associate_instance.uniqid,
content_type_org=org, object_id_org="828f4116-38eb-4f0c-9c5a-96a93682d106",
title=row['title'], start_date=row['start_date'],
end_date=row['end_date']
)
except IntegrityError as e:
logger.warning(f"Check for dupes: {name_string}, {e}")
continue
except ValidationError as v:
if row['end_date'] in ['null', 'None', '']:
row['end_date'] = None
p.s. This also gets a name error:
value = row[f'{value}']
Редактировать - CSV
last_name first_name middle_name suffix slug title start_date end_date
Clarke John Hessin Associate 1916-10-09 1922-09-18
Sutherland George Associate 1922-10-02 1938-01-17
Butler Pierce Associate 1923-01-02 1939-11-16
Sanford Edward Terry Associate 1923-02-19 1930-03-08
Roberts Owen Josephus Associate 1930-06-02 1945-07-31
Murphy Frank Associate 1940-02-05 1949-07-19
Byrnes James Francis Associate 1941-07-08 1942-10-03
Jackson Robert Houghwout Associate 1941-07-11 1954-10-09
Rutledge Wiley Blount Associate 1943-02-15 1949-09-10
Burton Harold Hitz Associate 1945-10-01 1958-10-13
Clark Tom Campbell Associate 1949-08-24 1967-06-12
Minton Sherman Associate 1949-10-12 1956-10-15
Whittaker Charles Evans Associate 1957-03-25 1962-03-31
Paul John Stevens Associate 1975-12-19 2010-06-29
O’Connor Sam David Associate 1981-09-25 2006-01-31
Thomas Charles Associate 1991-10-23 None
Green Rayann B. Associate 1993-08-10 None
Branson Stephen H. Associate 1994-08-03 None
Allen Samuel A. Jr. Associate 2006-01-31 None
Sanchez Sonia Associate 2009-08-08 None
Kammisch Elaine Associate 2010-08-07 None
Gormley Nathan M. Associate 2017-04-10 None
King Brad M. Associate 2018-10-06 None