Не могу вставить данные из csv-файла с датой в формате 'DD-MM-YYYY' в Oracle
Мой CSV-файл выглядит так (в данном случае дата в формате '05-06-2020')
TITLE,ISBN13,NUM_PAGES,PUBLICATION_DATE,COVER,DESCRIPTION,AMOUNT,PRICE
The Midnight Chronicles,9833880317949,228,05-06-2020,cover,A thrilling fantasy novel set in a world where darkness reigns and only a chosen few can bring back the light.,75,23.62
Я заполняю свои таблицы с помощью этого python-скрипта:
def append_csv(cursor, table_name, csv_file):
try:
with open(csv_file) as f:
reader = csv.reader(f, delimiter=',', quotechar='"')
i = -1
for row in reader:
if i == -1:
field_list = ','.join(row)
i += 1
continue
value_list = ["'%s'" % r for r in row]
value_list = ','.join(value_list)
try:
print("insert into %s (%s) values(%s)" % (table_name, field_list, value_list))
cursor.execute("insert into %s (%s) values(%s)" % (table_name, field_list, value_list))
i += 1
except cx_Oracle.Error as error:
print("Cannot insert value: %s" % value_list)
print("Error:", error)
except Exception as e:
print("Cannot insert data to table:", e)
Но получаю данную ошибку:
insert into BOOK (TITLE, ISBN13, NUM_PAGES, PUBLICATION_DATE, COVER, DESCRIPTION, AMOUNT, PRICE) values ('The Midnight Chronicles','9833880317949','228','05-06-2020','cover','A thrilling fantasy novel set in a world where darkness reigns and only a chosen few can bring back the light.','75','23.62')
Cannot insert value: 'The Midnight Chronicles','9833880317949','228','05-06-2020','cover','A thrilling fantasy novel set in a world where darkness reigns and only a
chosen few can bring back the light.','75','23.62'
Error: ORA-01843: not a valid month
Пожалуйста помогите.
Пробовала изменить создание таблицы:
CREATE TABLE book (
book_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
title VARCHAR2(255) NOT NULL,
isbn13 VARCHAR2(13),
num_pages INTEGER NOT NULL,
publication_date DATE NOT NULL,
cover VARCHAR2(255),
description VARCHAR2(1020) NOT NULL,
amount INTEGER NOT NULL,
price NUMBER(6, 2) NOT NULL,
CONSTRAINT CHK_DateFormat CHECK (publication_date = TO_DATE(publication_date, 'DD-MM-YYYY'))
);
Но это тоже не дало результатов. Меняла местами дни и годы, тоже не работает.
Ответы (1 шт):
Автор решения: EkaterinaSS
→ Ссылка
Я бы колонку publication_date создала как varchar2, а на следующем шаге распознала и перевела в дату, мало-ли изменится формат передаваемых дат в csv-файле, такое очень часто бывает.