0
0

Workato:PythonコネクタでSQLite3を利用する

Last updated at Posted at 2024-07-25

はじめに

WorkatoのPythonコネクタはsqliteのモジュールに対応しており、コード上でSQLite3データベースを利用することが可能です。

Workatoには SQL Collection by WorkatoSQL Transformationsがあり、これらのコネクタ上でSQLを利用したデータ処理(加工・抽出)が可能ですので、通常においてはPythonコネクタでSQLite3を使う必要性は低いのですが、契約プランによる制限があり通常利用できない場合や、これらのコネクタで要件を満たさないデータ処理を行う際に有効です。

なお、WorkatoのPythonコネクタは nobody ユーザーとして実行されるため、書き込み可能なディレクトリは /tmp のみに制限されています。また、最も手軽な方法はインメモリデータベースを利用することですので、今回はインメモリデータベースとしてSQLite3を利用することになります。

手順

1.Pythonコネクタをレシピ上へ追加します。

2.追加したPythonコネクタのOutputに result フィールドを追加します。

image.png

ここでは、文字列型で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文を実行した結果を確認することができます。

image.png

注意事項

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')}

image.png

関連情報

本記事作成にあたり、以下URLに掲載のコードを参考にさせていただきました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0