'CallbackRegistry' object has no attribute 'callbacks' python pickle.loads()

Проблема состоит в следующем: в MSSQL2019 sp_execute_external_script создаётся график matplotlib(код приложен в конце поста), после чего сериализуется и в виде байтовой последовательности передаётся в скрипт на Python. Проблема возникает на этапе обратного преобразования графика, а именно - выдаётся ошибка runfile('C:/Users/Gamer/Desktop/Проект архив/Анализ данных/test_g_plot.py', wdir='C:/Users/Gamer/Desktop/Проект архив/Анализ данных') Traceback (most recent call last): File "C:\Users\Gamer\Desktop\Проект архив\Анализ данных\test_g_plot.py", line 15, in fig = pickle.loads(tables[i][0]) File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\cbook_init_.py", line 195, in setstate for s, d in self.callbacks.items()} AttributeError: 'CallbackRegistry' object has no attribute 'callbacks'

Код хранимой процедуры SQL:

USE [TestPlot]
GO
/****** Object:  StoredProcedure [dbo].[PyPlotMatplotlib]    Script Date: 22.12.2021 22:01:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[PyPlotMatplotlib]
AS
BEGIN
    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
import matplotlib
import pandas 
import pickle
import matplotlib.pyplot as plt

df = pandas.DataFrame({"name": ["Earth", "Moon", "Mars"], "mass_to_earth": [1, 0.606, 0.107]})
fig_handle = plt.figure()
plt.barh(df.name, df.mass_to_earth)
# plt.hist(df.mass_to_earth)
plt.xlabel("Tipped")
plt.ylabel("Counts")
plt.title("Histogram, Tipped")
#plt.savefig("1.png")

#plt.show()

plot = pandas.DataFrame(data =[pickle.dumps(fig_handle, 3)], columns =["plot"])
plt.clf()

OutputDataSet = plot
plt.clf()
'
WITH RESULT SETS ((plot varbinary(max)))
END

Код python:

# -*- coding: utf-8 -*-

import pyodbc
import pickle
import os
import pydbwork
import matplotlib.pyplot as plt

cnxn = pydbwork.connect_db("SNOUBORT", "TestPlot")
cursor = cnxn.cursor()
cursor.execute("EXECUTE [dbo].[PyPlotMatplotlib]")
tables = cursor.fetchall()
for i in range(0, len(tables)):
    fig = pickle.loads(tables[i][0])

# fig.show()
# fig.savefig('0.png')
# print("The plots are saved in directory: ",os.getcwd())

Данный способ реализации был заимствован из этой статьи:Клик

В конечно итоге должен сохраняться такой график: введите сюда описание изображения


Ответы (0 шт):