概要

SalesForce(SFDC)のレコードをオブジェクトでまるっと抽出したいという要件があったとして、SFDCにはREST APIがあるのでそれを使うとまるっとSOQLでデータを抽出できます。
他にもPythonにはSFDCとつなぐためのライブラリがあるので、それを使うと簡単にSFDCのデータアクセスできます。
とは言え、正直言うと今はAWSを使っていればAmazonAppFlowを使うが吉かと思います。
これは単なる備忘録です😓

言語

使うのはPython3.8。
simple_salesforceというライブラリを使えばOK.

ソースコード

# coding: utf-8

import csv
import json
import os
from simple_salesforce import Salesforce
from csv import DictWriter
from datetime import date
from pathlib import Path

TABLE_LIST = [
    'Account',
    'Contact',
    'Task',
    'User',
    'Event'
]

def lambda_handler(event, context):
    sf = Salesforce(
        username=os.environ['SFDC_USERNAME'],
        password=os.environ['SFDC_PASSWORD'],
        security_token=os.environ['SFDC_TOKEN'],
        instance_url=os.environ['SFDC_HOST'],
        domain='test'
        )

    datapath = "/tmp/" + date.today().isoformat()
    try:
        os.makedirs(datapath, exist_ok=True)
    except FileExistsError:
        pass

    object_list = sf.describe()
    for list in object_list['sobjects']:
        salesforceObject = sf.__getattr__(list['name'])

        if list['name'] in TABLE_LIST:
            fieldNames = [field['name'] for field in salesforceObject.describe()['fields']]
            results = sf.query_all( "SELECT " + ", ".join(fieldNames) + " FROM " + list['name'])
            print(results)
            with open('tmp/test.csv', 'w') as f:
                writer = csv.writer(f)
                writer.writerow(results)
            return
    return

環境変数で接続情報を指定して、あとはCSVで吐き出すという所まで。
CSVじゃなくても良いけど、なんとなくCSV形式のほうが取り扱いやすいかと思い、そうしています。

カテゴリー: Python