【Python】SharePointリストに大量のデータを作成する方法

4 min
【Python】SharePointリストに大量のデータを作成する方法

記事内に広告を含む場合があります。このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。問題のある表現がありましたら、お問い合わせいただけますと幸いです。

SharePointリストをデータソースとしてPower Appsを作成したり、何かとSharePointリストで検証をしたい時があります。

これまではExcelからSharePointリストへエクスポートすることで対応していました。

ただ、

  • Excelからのエクスポートは、その都度リストが新規作成され、Power Appsなどの接続先の修正が面倒
  • 10万件以上のデータをSharePointにエクスポートするにはPCスペックが必要

という面倒なことがありました。

特に10万件以上のデータを準備したい時にはPower automateなどを駆使してフローを組まないと作れず、データを作る手間が多すぎました。

それをPythonから直接SharePointリストへ作成できるようになったので備忘録としてまとめておきます。

Microsoft Graphを利用するための設定を行う

PythonからSharePointへ接続する際に、Microsoft Graphを利用します。Azure Active Directory上で設定が必要です。

設定内容等につては、下記の記事で紹介しています。

Mimesisでテストデータを作成する

Pythonで適当なデータを作成する方法として、Mimesisというライブラリを利用します。

インストールされていない場合はインストールしておいてください。

pip install Mimesis

作成できるデータの内容や、作成方法は下記記事で解説しています。

実際のコード

実際のコードはこちらです。

import msal
import requests

from mimesis import Generic
from mimesis.random import Random
from mimesis.locales import Locale

# 1回のループで生成するデータ件数
batch_size = 10

# ループ回数
num_batches = 1
# num_batches = 1


# MSALの設定
authority = 'https://login.microsoftonline.com/<YOUR_TENANT_ID>'
client_id = '<YOUR_CLIENT_ID>'
scope = ['https://graph.microsoft.com/.default']  # スコープを指定

app = msal.ConfidentialClientApplication(
    client_id,
    authority=authority,
    client_credential="<YOUR_CLIENT_SECRET>"  # クライアントシークレットを指定
)
result = app.acquire_token_silent(scope, account=None)

if not result:
    # キャッシュされたトークンがない場合、新たにトークンを取得する
    result = app.acquire_token_for_client(scopes=scope)

if "access_token" in result:
    # SharePointへのアクセストークンを取得
    access_token = result["access_token"]
    # SharePointサイトのURLを指定
    api_url = "https://graph.microsoft.com/v1.0/sites/<YOUR_SITE_ID>/lists/<YOUR_LIST_ID>/items"

    headers = {
            'Authorization': 'Bearer ' + access_token,
            "Content-Type": "application/json"
        }
    gen = Generic(locale=Locale.JA)  # もし日本語のデータが欲しい場合は引数を'JA'に設定
    random = Random()
    for _ in range(batch_size):
            data = {
                "fields":{
                    # モックデータの生成
                    "Title": "1",
                    'address': gen.person.email(),
                    'full_name' : gen.person.full_name(),
                    'sex' : gen.person.sex(),
                    'age':gen.person.age(),
                    'username' : gen.person.username(),
                    'password' : gen.person.password()
                    }
                    }
            response = requests.post(api_url, headers=headers, json=data)
            if response.status_code == 201:
                print("成功")
            else:
                print(f"リストの追加に失敗しました。 Status code: {response.status_code}")

else:
    print("MSAL での認証に失敗しました。")

ループ回数の設定

ループ回数などを設定することで、大量のデータを作成することができます。任意の数字に自由に書き換えてください。

# 1回のループで生成するデータ件数
batch_size = 10

# ループ回数
num_batches = 1
# num_batches = 1

ただ、取得したトークンは60~90分で有効期限が切れます。有効期限が切れた後の処理は全て失敗になります。私の環境では、大体15,000件程度が60分で終わりましたので、多くとも同じぐらいのデータ量までにすることをおすすめします。

テナントIDなどを置き換える

こちらの記事でも解説していますが、テナントIDやクライアントIDなどを実際の値に置き換えます。

サイトID、リストIDを確認する

APIのURLにサイトIDとリストIDを利用しています。

 api_url = "https://graph.microsoft.com/v1.0/sites/<YOUR_SITE_ID>/lists/<YOUR_LIST_ID>/items"

サイトID等は下記記事を参考に取得して実際の値に置き換えてください。

dataに入れたい値を入れる。

dataに「列名:入れたい値」という形式で入れたいデータを作成します。列名はSharePointの列名と同じになるように設定してください。

data = {
                "fields":{
                    # モックデータの生成
                    "Title": "1",
                    'address': gen.person.email(),
                    'full_name' : gen.person.full_name(),
                    'sex' : gen.person.sex(),
                    'age':gen.person.age(),
                    'username' : gen.person.username(),
                    'password' : gen.person.password()
                    }
                    }

実行時間目安

実際に実行した際の時間です。数回実行しましたが、大体同じぐらいの時間で終わりました。

件数時間
1,00000:03:48
5,00000:18:14
10,00000:38:02
15,00000:57:18

ふー

ふー

Microsoft Power Platformを使ったり、ガジェットを買ったり、アニメ見たり、バイクに乗ったり、色々しています。

FOLLOW

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA