はじめに
WorkatoのPythonコネクタはsqliteのモジュールに対応しており、コード上でSQLite3データベースを利用することが可能です。
Workatoには SQL Collection by WorkatoやSQL Transformationsがあり、これらのコネクタ上でSQLを利用したデータ処理(加工・抽出)が可能ですので、通常においてはPythonコネクタでSQLite3を使う必要性は低いのですが、契約プランによる制限があり通常利用できない場合や、これらのコネクタで要件を満たさないデータ処理を行う際に有効です。
なお、WorkatoのPythonコネクタは nobody ユーザーとして実行されるため、書き込み可能なディレクトリは /tmp
のみに制限されています。また、最も手軽な方法はインメモリデータベースを利用することですので、今回はインメモリデータベースとしてSQLite3を利用することになります。
手順
1.Pythonコネクタをレシピ上へ追加します。
2.追加したPythonコネクタのOutputに result
フィールドを追加します。
ここでは、文字列型でresultを追加していますが、戻り値が明確であればそれに合わせてスキーマを定義されることをお勧めします。
3.追加したPythonコネクタのCodeへ以下のコードを入力します
import sqlite3
def main(input):
connection = sqlite3.connect(':memory:')
cursor = connection.cursor()
create_query = """
CREATE TABLE users (
id INTEGER,
age INTEGER NOT NULL,
name TEXT NOT NULL,
PRIMARY KEY (id)
);
"""
cursor.execute(create_query)
insert_query = """
INSERT INTO users
VALUES
(1, 20, 'Alice'),
(2, 30, 'Bob'),
(3, 40, 'Carol');
"""
cursor.execute(insert_query)
select_query = """
SELECT
*
FROM users
"""
cursor.execute(select_query)
print(cursor.fetchall())
return {'result': True}
実行結果
Test recipeなどでレシピを実行すると、次の通りSQLiteでSELECT文を実行した結果を確認することができます。
注意事項
WorkatoのPythonコネクタは、実行時間とファイルサイズに制限があります。
- 使用できるスクリプトは、最大 1 MB です。この制限を超えるサイズのスクリプトは、たとえ動作したとしても、メモリーの問題が生じる可能性があります。
- アクションは 30秒 後にタイムアウトします。
また、コンテナに割り当てられたメモリは256MBが上限であり、かつスワップが無いため、メモリの上限を超えないよう注意する必要があります。
MemTotal: 262144 kB
MemFree: 238176 kB
MemAvailable: 238176 kB
Buffers: 0 kB
Cached: 7564 kB
SwapCache: 0 kB
Active: 12632 kB
Inactive: 3784 kB
Active(anon): 8852 kB
Inactive(anon): 0 kB
Active(file): 3780 kB
Inactive(file): 3784 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 8852 kB
Mapped: 7564 kB
Shmem: 0 kB
※Pythonコネクタのメモリは以下のコードをPythonコネクタ上で実行することで確認が可能です。
import subprocess
def main(input):
result = subprocess.check_output(['cat', '/proc/meminfo'])
return {"result": str(result).split('\\n')}
関連情報
本記事作成にあたり、以下URLに掲載のコードを参考にさせていただきました。