SQL Server Python ВНУТРЕННЯЯ ОШИБКА: должен иметь тег

Я пытаюсь интегрировать SQL Server 2017 или 2019 с Qunatlib, используя python. Я могу запустить код Quantlib, который в данном конкретном случае возвращает объект расписания Qunatlib, который представляет собой пронумерованный список типа Quantlib.Date. Код выглядит так

      EXECUTE sp_execute_external_script
  @language = N'Python',
  @script = N'
import QuantLib as QL
import pandas as PD

effective_date = QL.Date(1, 1, 2015)
termination_date = QL.Date(1, 1, 2016)
tenor = QL.Period(QL.Monthly)
calendar = QL.UnitedStates()
business_convention = QL.Following
termination_business_convention = QL.Following
date_generation = QL.DateGeneration.Forward
end_of_month = False

schedule = QL.Schedule(effective_date,termination_date,tenor,calendar,business_convention,termination_business_convention,date_generation,end_of_month)
OutputDataSet  = PD.DataFrame(list(enumerate(schedule)),  columns=[''index'',''RollDate''])'

Однако я получаю следующую ошибку

      INTERNAL ERROR: should have tag
error while running BxlServer: caught exception: Error communicating between BxlServer and client: 0x000000e9

Если я уберу последнюю строку

      OutputDataSet  = PD.DataFrame(list(enumerate(schedule)),  columns=[''index'',''RollDate''])'

скрипт работает без ошибок. Я также могу запустить скрипт в других средах Python без ошибок. Я подозреваю, что проблема связана с приведением данных, но ошибка не особенно полезна. Мне нужно получить данные во фрейм данных для использования в SQL Server.

1 ответ

Сработало. Необходимо преобразовать тип данных в datetime и добавить его в файл pandas.

      import QuantLib as QL
import pandas as PD
import datetime

effective_date = QL.Date(1, 1, 2015)
termination_date = QL.Date(1, 1, 2016)
tenor = QL.Period(QL.Monthly)
calendar = QL.UnitedStates()
business_convention = QL.Following
termination_business_convention = QL.Following
date_generation = QL.DateGeneration.Forward
end_of_month = False

schedule = QL.Schedule(effective_date,termination_date,tenor,calendar,business_convention,termination_business_convention,date_generation,end_of_month)

OutputDataSet=PD.DataFrame(columns=[''RollDate''])
for i, d in enumerate(schedule):
    OutputDataSet.loc[i]=datetime.datetime(d.year(), d.month(), d.dayOfMonth())
Другие вопросы по тегам