Вывод, который вы видите, происходит из-за того, что результат запроса преобразуется в соответствующие типы данных Python - таким образом, значения первого столбца являются datetime
объектами, а второго - строками ( из-за to_char()
приведение вы делаете в запросе ).NLS_DATE_FORMAT
контролирует вывод только для обычных (пользовательских) клиентов.
Таким образом, вывод в csv является просто представлением по умолчанию для datetime
питона;если вы хотите вывести в другой форме, вам просто нужно изменить его.
Поскольку ответ на запрос представляет собой список кортежей, вы не можете просто изменить его на месте - его нужно скопировать имодифицирована;в качестве альтернативы, вы можете написать его строка за строкой, модифицированный.
Вот только часть записи со вторым подходом:
import datetime
# the rest of your code
while len(rows) > 0:
for row in rows:
value = (row[0].strftime('%d.%m.%Y'), row[1])
csv_writer.writerow(value)
rows = cur.fetchmany(16000)
Для справки, вот краткий список с питоном директивы strftime .