Python bcp вставка без знания порядка столбцов
Я использую Django и bcp для вставки огромного количества данных в мою базу данных.
На данный момент у меня есть датафрейм, который я конвертирую в CSV с помощью to_csv()
, который моя команда BCP затем считывает и загружает в DB.
Однако, для правильной загрузки, я должен иметь файл в точном порядке, как колонки в DB, и на данный момент я делаю это вручную следующим образом:
data = data[['id', 'data_date', 'data', 'created_at', 'modified_at', 'signal_id']]
Я попытался использовать следующую команду для получения порядка колонок из таблицы, как я узнал из этого ответа, но, похоже, она ничего не вернула. Процесс просто застрял
bcp_string_get_col_names = "bcp \"DECLARE @colnames VARCHAR(max);SELECT @colnames = COALESCE(@colnames + ',', '') + column_name from {}.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='{}'; select @colnames;\" queryout HeadersOnly.csv -S {} -U {} -P {}".format(database, table, host, user, password)
status = subprocess.run(bcp_string_get_col_names, stdout=subprocess.PIPE)
Команда, которая загружает мои данные в базу данных, выглядит следующим образом:
bcp_string_upload = 'bcp {} in {} -S {} -d {} -U {} -P {} -t "{}" -c -F {} -b 20000'.format(table, file, host, database, user, password, sep, row_start)
status = subprocess.run(bcp_string_upload, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
Я был бы очень признателен, если бы вы подсказали мне, как получить столбцы из БД или как загрузить, используя заголовки датафрейма, чтобы нам не был важен порядок столбцов.