Я следовал этому учебному руководству по SQL для Python и T-SQL:
https://docs.microsoft.com/en-us/sql/advanced-analytics/tutorials/sqldev-py3-explore-and-visualize-the-data?view=sql-server-2017
Все выполняется нормально, пока я не попытаюсь запустить следующее в Jupyter Notebook:
%matplotlib notebook
import pyodbc
import pickle
import os
cnxn = pyodbc.connect('DRIVER=SQL Server;SERVER={SERVER_NAME};DATABASE=
{DB_NAME};Trusted_Connection=True;')
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.savefig(str(i)+'.png')
print("The plots are saved in directory: ",os.getcwd())
Я получаю следующее предупреждение:
C:\Anaconda3\lib\site-packages\matplotlib\figure.py:1889: UserWarning:
This figure was saved with matplotlib version 2.0.0 and is unlikely to
function correctly.
(version, ))
И выводится ошибка:
AttributeError Traceback (most recent call last)
<ipython-input-11-5ff21e932b37> in <module>()
5 for i in range(0, len(tables)):
6 fig = pickle.loads(tables[i][0])
----> 7 fig.savefig(str(i)+'.png')
8 print("The plots are saved in directory: ",os.getcwd())
C:\Anaconda3\lib\site-packages\matplotlib\figure.py in savefig(self, fname, **kwargs)
2033 self.set_frameon(frameon)
2034
-> 2035 self.canvas.print_figure(fname, **kwargs)
2036
2037 if frameon:
C:\Anaconda3\lib\site-packages\matplotlib\backend_bases.py in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs)
2261 orientation=orientation,
2262 bbox_inches_restore=_bbox_inches_restore,
-> 2263 **kwargs)
2264 finally:
2265 if bbox_inches and restore_bbox:
C:\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py in print_png(self, filename_or_obj, *args, **kwargs)
511
512 def print_png(self, filename_or_obj, *args, **kwargs):
--> 513 FigureCanvasAgg.draw(self)
514 renderer = self.get_renderer()
515 original_dpi = renderer.dpi
C:\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py in draw(self)
431 # if toolbar:
432 # toolbar.set_cursor(cursors.WAIT)
--> 433 self.figure.draw(self.renderer)
434 # A GUI class may be need to update a window using this
draw, so
435 # don't forget to call the superclass.
C:\Anaconda3\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
53 renderer.start_filter()
54
---> 55 return draw(artist, renderer, *args, **kwargs)
56 finally:
57 if artist.get_agg_filter() is not None:
C:\Anaconda3\lib\site-packages\matplotlib\figure.py in draw(self, renderer)
1456 try:
1457 renderer.open_group('figure')
-> 1458 if self.get_constrained_layout() and self.axes:
1459 if True:
1460 self.execute_constrained_layout(renderer)
C:\Anaconda3\lib\site-packages\matplotlib\figure.py in
get_constrained_layout(self)
520 See :doc:`/tutorials/intermediate/constrainedlayout_guide`
521 """
--> 522 return self._constrained
523
524 def set_constrained_layout(self, constrained):
AttributeError: 'Figure' object has no attribute '_constrained'
В учебном пособии, которое я использую, написано "makeубедитесь, что библиотеки Python на вашем клиенте (например, matplotlib) имеют ту же или более высокую версию относительно библиотек, установленных на сервере. "Я проверил и Сервер использует Matplotlib версии 2.0.0.Поэтому я обновил версию своего клиента до 2.2.2 и повторно запустил вышеописанное, и получил ту же ошибку, включая предупреждение пользователя.
Если кто-нибудь знает, как это исправить, помогите.
РЕДАКТИРОВАТЬ: я не уверен, если это имеет значение, но я заметил, что SQL Server использует Python 3.5, в то время как я использую 3.6.3.