SQLAlchemy ORM を使用して Python で SharePoint Excel Services のデータ にアクセスする方法

Jerod Johnson
Jerod Johnson
Senior Technology Evangelist
SQLAlchemy オブジェクトリレーショナルマッピングを使用して、SharePoint Excel Services のデータ を操作する Python アプリケーションとスクリプトを作成します。

Python の豊富なモジュールエコシステムを活用することで、迅速に作業を開始し、システムを効果的に統合できます。CData Python Connector for SharePoint Excel Services と SQLAlchemy ツールキットを使用して、SharePoint Excel Services に接続された Python アプリケーションやスクリプトを構築できます。この記事では、SQLAlchemy を使用して SharePoint Excel Services のデータ に接続し、クエリを実行する方法を説明します。

CData Python Connector は最適化されたデータ処理機能を内蔵しており、Python からリアルタイムの SharePoint Excel Services のデータ を操作する際に比類のないパフォーマンスを提供します。SharePoint Excel Services に対して複雑な SQL クエリを発行すると、CData Connector はフィルタや集計などのサポートされている SQL 操作を直接 SharePoint Excel Services にプッシュし、サポートされていない操作(多くの場合 SQL 関数や JOIN 操作)は組み込みの SQL エンジンを使用してクライアント側で処理します。

SharePoint Excel Services のデータ への接続

SharePoint Excel Services のデータ への接続は、他のリレーショナルデータソースへの接続と同様です。必要な接続プロパティを使用して接続文字列を作成します。この記事では、接続文字列を create_engine 関数のパラメータとして渡します。

ワークブックへの接続

どちらのSharePoint エディションをお使いでも、File を Excel ワークブックに設定してください。このパスは以下のプロパティからの相対パスになります。

  • Library:デフォルトではShared Documents ライブラリが使用されます。このプロパティを使って、組織内の別のドキュメントライブラリを指定してみてください。例えば、OneDrive for Business に接続する場合は、このプロパティを"Documents" に設定します。
  • Folder:このプロパティを使って、ライブラリ内のサブフォルダへのパスを指定できます。パスはLibrary で指定されたライブラリ名に関連します。

テーブルとしてのスプレッドシートデータへの接続

CData 製品では、基底API で利用可能なオブジェクトに基づいて、使用可能なテーブルを検出していきます。

API では異なるAPI オブジェクトを表示します。スプレッドシートの構成とSharePoint のバージョンに基づいてAPI を選択しましょう。

  • OData: OData API を使用すると、Excel で[挿入]->[テーブル]をクリックして作成されたExcel テーブルオブジェクト(範囲やスプレッドシートではありません)から定義されたテーブルにアクセスできます。OData API に接続する際、ワークブックにテーブルオブジェクトが定義されていない場合は、CData 製品がテーブルを返さないことがあります。テーブルとしてスプレッドシートまたは範囲に接続するには、UseRESTAPI をtrue に設定してください。
  • REST: REST API を使用すると、Excel テーブルオブジェクト、範囲、およびスプレッドシートから定義されたテーブルへアクセスできます。これがデフォルトの API です。範囲およびスプレッドシートから多数の行をリクエストすることは REST API によって制限されており、CData 製品では返される行数をデフォルトで 100 に制限しています。また CData 製品では、デフォルトで1行目からカラム名を検出します。これを無効にするには、Header を設定してください。

DefineTables を追加設定すると、Excel の範囲の構文を使用して、範囲に基づいてテーブルを定義できます。大きすぎる範囲は、API によって制限されます。

SharePoint オンプレミスへの接続

URL をサーバー名もしくはIP アドレスに設定しましょう。さらに、SharePointVersion と認証値を設定します。

SharePoint OnPremises を認証するには、AuthScheme を認証タイプに設定し、必要に応じてUserPassword を設定してください。

Note:SharePoint On-Premises 2010 に接続する場合は、 UseRESTAPI をtrue に設定する必要があります。

    Windows(NTLM)

    最も一般的な認証タイプです。CData 製品では NTLM をデフォルトとして使用するよう事前設定されています。Windows のUserPassword を設定して接続してください。

    その他の認証方法については、ヘルプドキュメントの「はじめに」をご覧ください。

    以下の手順に従って SQLAlchemy をインストールし、Python オブジェクトを通じて SharePoint Excel Services にアクセスしてみましょう。

    必要なモジュールのインストール

    pip ユーティリティを使用して、SQLAlchemy ツールキットと SQLAlchemy ORM パッケージをインストールします。

    pip install sqlalchemy
    pip install sqlalchemy.orm

    適切なモジュールをインポートします。

    from sqlalchemy import create_engine, String, Column
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm import sessionmaker

    Python での SharePoint Excel Services のデータ のモデリング

    これで接続文字列を使用して接続できます。create_engine 関数を使用して、SharePoint Excel Services のデータ を操作するための Engine を作成します。

    注意: 接続文字列のプロパティに特殊文字が含まれている場合は、URL エンコードする必要があります。詳細については、SQL Alchemy ドキュメントを参照してください。

    engine = create_engine("excelservices:///?URL=https://myorg.sharepoint.com&User=admin@myorg.onmicrosoft.com&Password=password&File=Book1.xlsx")
    

    SharePoint Excel Services のデータ のマッピングクラスの宣言

    接続を確立したら、ORM でモデル化するテーブルのマッピングクラスを宣言します(この記事では、Account テーブルをモデル化します)。sqlalchemy.ext.declarative.declarative_base 関数を使用して、一部またはすべてのフィールド(カラム)を定義した新しいクラスを作成します。

    base = declarative_base()
    class Account(base):
    	__tablename__ = "Account"
    	Name = Column(String,primary_key=True)
    	AnnualRevenue = Column(String)
    	...
    

    SharePoint Excel Services のデータ のクエリ

    マッピングクラスを準備したら、セッションオブジェクトを使用してデータソースにクエリを実行できます。Engine をセッションにバインドした後、セッションの query メソッドにマッピングクラスを渡します。

    query メソッドの使用

    engine = create_engine("excelservices:///?URL=https://myorg.sharepoint.com&User=admin@myorg.onmicrosoft.com&Password=password&File=Book1.xlsx")
    factory = sessionmaker(bind=engine)
    session = factory()
    for instance in session.query(Account).filter_by(Industry="Floppy Disks"):
    	print("Name: ", instance.Name)
    	print("AnnualRevenue: ", instance.AnnualRevenue)
    	print("---------")
    

    別の方法として、適切なテーブルオブジェクトと execute メソッドを使用することもできます。以下のコードはアクティブな session で動作します。

    execute メソッドの使用

    Account_table = Account.metadata.tables["Account"]
    for instance in session.execute(Account_table.select().where(Account_table.c.Industry == "Floppy Disks")):
    	print("Name: ", instance.Name)
    	print("AnnualRevenue: ", instance.AnnualRevenue)
    	print("---------")
    

    JOIN、集計、制限などのより複雑なクエリの例については、拡張機能のヘルプドキュメントを参照してください。

    無料トライアルと詳細情報

    CData Python Connector for SharePoint Excel Services の30日間の無料トライアルをダウンロードして、SharePoint Excel Services のデータ に接続する Python アプリとスクリプトの構築を始めましょう。ご質問がありましたら、サポートチームまでお問い合わせください。

はじめる準備はできましたか?

SharePoint Excel Services Connector のコミュニティライセンスをダウンロード:

 ダウンロード

詳細:

SharePoint Excel Services Icon SharePoint Excel Services Python Connector お問い合わせ

SharePoint Excel Services データ連携用のPython Connector ライブラリ。pandas、SQLAlchemy、Dash、petl などの主要なPython ツールにSharePoint Excel Services をシームレスに統合。