各製品の資料を入手。
詳細はこちら →SQLAlchemy ORM を使って、Python でSage 300 のデータに連携する方法
CData Python Connector を使って、Python アプリケーションおよびスクリプトからSQLAlchemy 経由でSage 300 にOR マッピング可能に。
最終更新日:2023-09-23
この記事で実現できるSage 300 連携のシナリオ
こんにちは!ウェブ担当の加藤です。マーケ関連のデータ分析や整備もやっています。
Pythonエコシステムには、多くのモジュールがあり、システム構築を素早く効率的に行うことができます。CData Python Connector for Sage300 は、pandas、Matplotlib モジュール、SQLAlchemy ツールキットから使用することで Sage 300 にデータ連携するPython アプリケーションを構築し、Sage 300 のデータを可視化できます。 本記事では、SQLAlchemy でSage 300 に連携して、データを取得、 する方法を説明します。
CData Python Connectors の特徴
CData Python Connectors は、以下のような特徴を持った製品です。
- Sage 300 をはじめとする、CRM、MA、会計ツールなど多様なカテゴリの270種類以上のSaaS / オンプレデータソースに対応
- Python をはじめとする多様なデータ分析・BI ツールにSage 300 のデータを連携
- ノーコードでの手軽な接続設定
CData Python Connectors では、1.データソースとしてSage 300 の接続を設定、2.Python からPython Connectors との接続を設定、という2つのステップだけでデータソースに接続できます。以下に具体的な設定手順を説明します。
必要なモジュールのインストール
pip でSQLAlchemy ツールキットをインストールします:
pip install sqlalchemy
モジュールのインポートを忘れずに行います:
import sqlalchemy
Python でSage 300 のデータをモデル化
次は、接続文字列で接続を確立します。create_engine 関数を使って、Sage 300 のデータに連携するEngne を作成します。
engine = create_engine("sage300///?User=SAMPLE&Password=password&URL=http://127.0.0.1/Sage300WebApi/v1/-/&Company=SAMINC")
Sage 300 には、Sage 300 Web API で通信するための初期設定が必要となるます。
- Sage 300 のユーザー向けのセキュリティグループを設定します。Sage 300 のユーザーに、Security Groups の下にあるbSage 300 Web API オプションへのアクセスを付与します(各モジュール毎に必要です)。
- /Online/Web と/Online/WebApi フォルダ内のweb.config ファイルを両方編集して、AllowWebApiAccessForAdmin のキーを true 設定します。webAPI アプリプールを再起動すると設定が反映されます。
- ユーザーアクセスを設定したら、https://server/Sage300WebApi/ をクリックして、web API へのアクセスを確認してください。
Basic 認証を使用してSage 300 へ認証します。
Basic 認証を使用して接続する
Sage 300 に認証するには、次のプロパティを入力してください。プロバイダーは、クッキーを使用してSage 300 が開いたセッションを再利用することに注意してください。 そのため、資格情報はセッションを開く最初のリクエストでのみ使用されます。その後は、Sage 300 が返すクッキーを認証に使用します。
- Url:Sage 300 をホストするサーバーのURL に設定します。Sage 300 Web API 用のURL を次のように作成してください。 {protocol}://{host-application-path}/v{version}/{tenant}/ 例えば、 http://localhost/Sage300WebApi/v1.0/-/ です。
- User:アカウントのユーザー名に設定します。
- Password:アカウントのパスワードに設定します。
Sage 300 のデータのマッピングクラスの宣言
接続を確立したら、OR マッパーでモデル化するテーブルのマッピングクラスを宣言します。本記事では、OEInvoices テーブルを使います。sqlalchemy.ext.declarative.declarative_base 関数を使って、新しいクラスにフィールド(カラム)を定義します。
base = declarative_base() class OEInvoices(base): __tablename__ = "OEInvoices" InvoiceUniquifier = Column(String,primary_key=True) ApprovedLimit = Column(String) ...
Sage 300 のデータをクエリ
マッピングクラスができたので、セッションオブジェクトを使ってデータソースをクエリすることができます。セッションにEngine をバインドして、セッションのquery メソッドにマッピングクラスを提供します。
query メソッドを使う
engine = create_engine("sage300///?User=SAMPLE&Password=password&URL=http://127.0.0.1/Sage300WebApi/v1/-/&Company=SAMINC") factory = sessionmaker(bind=engine) session = factory() for instance in session.query(OEInvoices).filter_by(AllowPartialShipments="Yes"): print("InvoiceUniquifier: ", instance.InvoiceUniquifier) print("ApprovedLimit: ", instance.ApprovedLimit) print("---------")
ほかの方法としては、execute メソッドを適切なテーブルオブジェクトに使うことが可能です。以下のコードはアクティブなsession に対して有効です。
execute メソッドを使う
OEInvoices_table = OEInvoices.metadata.tables["OEInvoices"] for instance in session.execute(OEInvoices_table.select().where(OEInvoices_table.c.AllowPartialShipments == "Yes")): print("InvoiceUniquifier: ", instance.InvoiceUniquifier) print("ApprovedLimit: ", instance.ApprovedLimit) print("---------")
より複雑なクエリとして、JOIN、集計、Limit などが利用可能です。詳細はヘルプドキュメントをご覧ください。
Sage 300 からPython へのデータ連携には、ぜひCData Python Connector をご利用ください
このようにCData Python Connector と併用することで、270を超えるSaaS、NoSQL データをPython からコーディングなしで扱うことができます。30日の無償評価版が利用できますので、ぜひ自社で使っているクラウドサービスやNoSQL と合わせて活用してみてください。
日本のユーザー向けにCData Python Connector は、UI の日本語化、ドキュメントの日本語化、日本語でのテクニカルサポートを提供しています。