"Вы когда-нибудь задавались вопросом, как получить доступ к Microsoft SharePoint в ваших сценариях Python?
В этом учебнике так и написано: вы сможете сделать это простым способом, используя инструмент под названием Connect Bridge".
Дата первоначальной публикации: 10 июля 2019 г.
Последнее обновление: 14 октября 2026 года
Коротко
- Функции: позволяет скрипту на Python считывать и записывать списки и библиотеки документов SharePoint с помощью обычного SQL через ODBC и
pyodbcмодуль. - Как: Коммерческий инструмент Connect Bridge (доступна бесплатная пробная версия) выступает в качестве промежуточного звена между Python и SharePoint и предоставляет доступ к API SharePoint так, как если бы это была база данных.
- Что вам понадобится: компьютер под управлением Windows, Python 3,
pyodbc, Connect Bridge с настроенной учетной записью SharePoint и сгенерированной им строкой подключения ODBC. - Что вы получаете: основной скрипт длиной около 15 строк, а также примеры SQL и хранимых процедур для создания списков, вставки записей, а также загрузки и скачивания документов.
- Предостережения: Только для Windows (проверено автором); коммерческая лицензия.
- Лучшее для: команды, которые мыслят на языке SQL и хотят избежать непосредственного изучения API SharePoint.
Содержание
Введение
В этой статье описывается, как сделать Питон подключается к SharePoint, то есть как получить доступ к данным систем Microsoft SharePoint (2013, 2016, 2019 или Online) из скриптов на языке Python. Передача данных осуществляется через ODBC-слой.
Примечание об обновлении: Примеры, приведенные в этой статье, изначально были созданы и протестированы в 2019–2022 годах с использованием Python 3.7 и модуль пиодбк версия 4.0.26. В октябре 2026 года мы упростили скрипт и переписали механизм обработки ошибок с учётом Python 3.14 и pyodbc 5.3.0. Если в вашей среде что-то работает иначе, сообщите нам об этом в комментариях.
Важно отметить, что в этой статье мы используем коммерческий продукт под названием Connect Bridge. На самом деле, это то, что делает возможным интеграцию Python / SharePoint, позволяя передачу данных таким образом, что вы уверены, что не испортите сторону SharePoint (и, поверьте мне, это ОЧЕНЬ важно). Вы можете получить бесплатную пробную версию для Connect Bridge, так что вы можете попробовать все это для себя.
Что это за "Connect Bridge"?
Я рад, что вы спросили! Connect Bridge это интеграционная платформа, разработанная компанией Connecting Software, которая позволяет подключать любое программное обеспечение через драйверы ODBC, JDBC или веб-сервисы. Общий обзор архитектуры инструмента представлен на этой диаграмме сценария клиент-сервер.
(opens in a new tab)Connect Bridge архитектура платформы интеграции
Как видно на архитектурной схеме, этот инструмент можно использовать не только для доступа к данным Microsoft SharePoint из вашего скрипта на Python, но и для захвата/вывода данных из/в Microsoft Exchange и Microsoft Dynamics CRM среди многих других.
Целью нашей работы было создание скрипта на языке Python, который позволил бы нам общаться с SharePoint через Connect Bridge.
Мы используем SharePoint, но можно использовать аналогичную логику для подключения к Microsoft Exchange или в CRM, например Salesforce или Dynamics.
Начало...
Теперь давайте начнем это руководство! Наша цель - создать простой сценарий Python, который получит доступ к экземпляру SharePoint. Мы предполагаем, что экземпляр SharePoint уже существует (убедитесь, что у вас под рукой есть учетные данные для входа). Вот простые шаги, которые вам необходимо выполнить:
1. Запрос a бесплатная пробная версия и установить Connect Bridge
2. Установить Питон для Windows версия 3.14+. Обратите внимание, что для упрощения написания, запуска и отладки моего скрипта мы использовали Лицензия Версия 12.0.1 с плагином pydev, но это, конечно, не обязательно. Подойдет любой редактор, например VS Code или PyCharm.
3. Установить модуль пиодбк 5.3.0+
4. Запустите Connect Bridge студию управления и
4.1. Добавьте учетную запись для SharePoint (Учетные записи - Добавить учетную запись). Здесь вам понадобятся учетные данные, о которых мы упоминали ранее.
4.2. Откройте Новый запрос опцию, а затем Браузер соединений. Найдите Разъем SharePoint и открывайте его, пока не увидите DefaultConnection. Щелкните на нем правой кнопкой мыши и выберите Получить строку подключения. Затем скопируйте строку подключения ODBC. Она понадобится для передачи сценарию.
4.3. Используйте опцию "Новый запрос" для проверки запроса, который позволит получить доступ к тому, что вам нужно в SharePoint. Мы приведем здесь пример запроса, но именно здесь вы должны указать, что именно вы ищете в SharePoint. После того как вы нажмете кнопку Новый запрос, откройте Браузер соединений. Найдите Разъем SharePoint и открывайте его, пока не увидите Таблицы опция. Вы увидите, что схема содержит “таблицу” под названием Site_Pages, поэтому мы можем построить наш запрос следующим образом
SELECT UniqueId, ContentType, Created, Modified, ContentVersion FROM Site_Pages LIMIT 10;
для выбора первых 10 записей из SharePoint Страницы сайта список. Важно отметить, что хотя это выглядит так, как будто мы используем базу данных напрямую, это не так.
Connect Bridge обращается к API, а затем представляет его так, как будто это база данных. Как только у вас будет готовый запрос, скопируйте его, так как он вам понадобится для передачи в скрипт.
Руки на сценарии!
Основным и в то же время единственным файлом нашего решения является CBQuery.py. Полный исходный код приведен ниже. Пожалуйста, сосредоточьтесь на строках 70-92, которые изображают ядро решения. Полное описание того, как работает этот скрипт, приведено ниже.
#!/usr/bin/env python3
# кодировка: utf-8
"""
CBQuery — запрос данных из SharePoint и запись данных в SharePoint
Выполняет SQL-запросы через драйвер ODBC Connect Bridge.
@author: Ана Нето
@created: 04.07.2019
@updated: 14.10.2026
"""
import sys
from argparse import ArgumentParser
from contextlib import closing
import pyodbc
def main():
parser = ArgumentParser(description=__doc__)
parser.add_argument("connstr", help="Строка подключения ODBC из Connect Bridge Management Studio")
parser.add_argument("query", help="SQL-запрос или оператор EXEC для выполнения")
args = parser.parse_args()
try:
# Закрыть соединение по завершении работы
with closing(pyodbc.connect(args.connstr)) as conn:
cursor = conn.cursor()
cursor.execute(args.query)
if cursor.description is None:
# Строк результатов не найдено
conn.commit()
print("OK")
else:
for row in cursor:
print(row)
conn.commit()
return 0
except KeyboardInterrupt:
return 130
except pyodbc.Error as err:
print(f"Ошибка ODBC: {err}", file=sys.stderr)
return 2
if __name__ == "__main__":
sys.exit(main())Вот что делает наш сценарий:
- Сайт
argparseблок считывает два аргумента командной строки,connstr(строка подключения ODBC) изапрос. - Переменная `connstr` содержит строку подключения ODBC, которую мы передаем в модуль `pyodbc` для установления соединения ODBC (сохраняется в
соединениепеременная). Соединение заключено вcontextlib.closing, поэтому он всегда закрывается по окончании блока, даже если произошла ошибка. - Далее мы открываем курсор базы данных, используя соединение, сохраненное в переменной `conn`.
- Мы выполняем SQL-запрос (это тот запрос, который был передан через параметр командной строки с именем query)
- Если запрос возвращает строки, мы просматриваем курсор и считываем результаты построчно, выводя каждую строку в исходном виде. В данной демонстрации мы выбрали именно такой подход, но обратите внимание: выходные данные могут быть в любом формате… мы могли бы отформатировать их как XML, JSON, CSV… или любой другой формат обмена данными. Мы также могли бы просто использовать объект с необработанными данными в последующем коде для выполнения пользовательских задач.
- Если запрос не возвращает строк (INSERT, EXEC), скрипт выводит сообщение “OK”.
- В обоих случаях транзакция фиксируется явно, поэтому изменения, внесённые с помощью операторов INSERT и хранимых процедур, сохраняются.
- Ошибки ODBC выводятся в stderr, и скрипт завершается с кодом 2. Нажатие Ctrl+C приводит к завершению с кодом 130, а успешное выполнение — с кодом 0.
Запуск сценария CBQuery.py
Скрипт CBQuery.py принимает два позиционных аргумента командной строки: connstr и query.
Нам нужно скопировать их из Connect Bridge Management Studio, как описано выше (пункт 4 Начало работы секция).
Затем запустите скрипт следующим образом:
python CBQuery.py "" "SELECT UniqueId, ContentType FROM Site_Pages LIMIT 10;"
Давайте теперь предположим, что мы хотим создать список контактов в SharePoint и добавить в него контакт.
В принципе, нам нужно выполнить тот же процесс, но изменить запрос так, чтобы использовать “хранимую процедуру”. Опять же, эта “хранимая процедура” фактически будет обращаться к SharePoint через API, но она будет заносить данные именно в ту таблицу SharePoint, которую вы указали. Вот запрос, который нам нужно выполнить:
EXEC SP_CREATE_TABLE 'MyContacts', 'This table was created using Connect Bridge', true, 'Contacts';
Параметры, в порядке их перечисления, следующие: имя нового списка (Мои контакты); описание; булевый флаг (правда); а также шаблон списка SharePoint, на котором он будет основан (Контакты).
Запрос создает новый список SharePoint (MyContacts) с описанием, которое будет отображаться в панели быстрого запуска на странице SharePoint.
Теперь нам нужно выполнить следующий запрос, чтобы обновить рефлексию схемы Connect Bridge в ODBC в соответствии со схемой SharePoint. Таким образом, наша новая “таблица” станет видимой для ODBC-клиента. (Эта процедура не принимает параметров.)
EXEC SP_UPDATE_SCHEMA;
На этом этапе мы можем вставить запись о контакте в наш список контактов.
INSERT INTO MyContacts (FirstName, LastName) VALUES ('Ana', 'Neto');
Теперь вы сможете увидеть нашу запись и наш новый список SharePoint в интерфейсе SharePoint.
Мы можем выбрать только что созданную запись, выполнив следующий запрос.
SELECT FirstName,LastName FROM MyContacts
Для загрузки общедоступного документа мы будем использовать существующий список SharePoint “Документы” и хранимую процедуру SP_INSERT_SHAREDDOCUMENT. Параметры, которые она принимает:
- Название таблицы общих документов
- Имя файла
- Папка (относительный путь на сервере)
- Тип MIME
- Данные для файла (в кодировке Base64; в приведенном ниже примере,
SGVsbG8gV29ybGQ=— это просто текст “Hello World”)
Мы можем вставить документ, запустив следующее заявление:
EXEC SP_INSERT_SHAREDDOCUMENT
'Документы',
'hello2.txt',
'/Общие документы/NewFolder',
'text/plain',
'SGVsbG8gV29ybGQ=';
Если вы хотите заранее проверить наличие папки, можно выполнить приведенный ниже запрос. Его параметрами являются название библиотеки документов и относительный путь к папке:
EXEC SP_ENSURE_FOLDER_PATH
'Документы',
'/NewFolder';
После выполнения SP_INSERT_SHAREDDOCUMENT мы можем проверить наличие документа в таблице “Документы”, выполнив оператор:
SELECT Id,Name FROM Documents;
Мы также можем загрузить двоичное содержимое конкретного документа из определенной библиотеки документов, выполнив следующий оператор: ниже. Его параметрами являются название библиотеки и идентификатор документа, возвращаемые функцией SELECT, приведенной выше:
EXEC SP_SAVE_SHAREDDOCUMENT_BY_ID 'Documents', 2;
На этом этапе вы можете проверить наличие общедоступного документа в пользовательском интерфейсе SharePoint.
Ограничения
Пока что мы могли использовать инструмент Connect Bridge только в операционных системах Windows, поскольку библиотека ODBC-клиента для Linux отсутствует (и мы даже не уверены, возможно ли это вообще). Поэтому обязательно тестируйте свои скрипты на Python на компьютере под управлением Windows.
Заключение
Мы увидели, как с помощью интеграционной платформы Connect Bridge можно легко получить доступ к данным SharePoint в Python. А теперь представьте, что то, что вы увидели в этой статье, возможно и с Microsoft Dynamics CRM и Microsoft Exchange! Да, с Connect Bridge это возможно, и способ реализации аналогичен.
К кому я могу обратиться за вопросами?

По адресу Ана Нето, технический консультант в Connecting Software.
Я работаю инженером-программистом с 1997 года, а в последнее время полюбил писать и выступать публично". У вас есть вопросы или комментарии по поводу этой статьи? Я буду рад получить ваш отзыв, оставьте комментарий ниже!"

Comments 1
Спасибо за четкое объяснение!