電子趣味の部屋

電子系のガジェットやアプリ開発等の趣味の話題を書いてます

MicroPythonでSQL実行できるローカルDBライブラリ LocalDB.py

以前公開したLocalDB.jsのMicroPython版「LocalDB.py」を公開しました。
github.com
今回もソースの整形やテスト・修正、公開のためのコメントやドキュメント作成で生成AIの力を借りてます。

LocalDB.pyは、MicroPython環境で標準的なSQL構文を使用してデータを操作できるシンプルなライブラリです。すべてのデータはJSONファイルに自動的に保存されるため、電源を切ってもデータが失われません。ESP32、ESP8266、Raspberry Pi Picoなどのマイコンで動作し、標準のPython 3.xでも使用できます。

主な機能

1. SQL操作
  • CREATE TABLE - テーブルの作成
  • INSERT - データの挿入
  • SELECT - データの取得
  • UPDATE - データの更新
  • DELETE - データの削除
2. WHERE句と演算子
  • 比較演算子:=, !=, <>, >, <, >=, <=
  • LIKE - パターンマッチング
  • IN / NOT IN - リスト内の値チェック
  • BETWEEN - 範囲チェック
  • IS NULL / IS NOT NULL - NULL値チェック
3. SELECT句の機能
  • ORDER BY - 結果のソート(昇順・降順)
  • GROUP BY + HAVING - グループ化と集計
  • LIMIT + OFFSET - ページネーション
  • DISTINCT - 重複排除
4. JOIN機能
  • INNER JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • CROSS JOIN
5. 集約関数
  • COUNT - 件数カウント
  • SUM - 合計
  • AVG - 平均
  • MAX - 最大値
  • MIN - 最小値
6. スカラー関数
  • UPPER / LOWER - 大文字・小文字変換
  • LENGTH - 文字列長

使用方法

簡単ですが、実装例です。

from localdb import LocalDB

# データベースインスタンスの作成
db = LocalDB('myapp')

# テーブルの作成
db.execute("""
  CREATE TABLE users (id, name, age)
""")

# データの挿入
db.execute("""
  INSERT INTO users VALUES (1, 'Taro', 30)
""")

# データの取得
result = db.execute("""
  SELECT * FROM users WHERE age > 25 ORDER BY age DESC
""")
print(result)

# データの更新
db.execute("""
  UPDATE users SET age = 31 WHERE id = 1
""")

# データの削除
db.execute("""
  DELETE FROM users WHERE id = 1
""")

# データベースを閉じる
db.close()

データの保存先

データはデフォルトで localdb/ フォルダ内にJSONファイルとして保存されます。保存先は変更可能です。

# デフォルト: localdb/ フォルダに保存
db = LocalDB('myapp')

# カスタムフォルダを指定
db = LocalDB('myapp', storage_path='data')

# カレントディレクトリに保存
db = LocalDB('myapp', storage_path='')

対応プラットフォーム

プラットフォーム 状態
ESP32 動作確認済み
ESP8266 対応
Raspberry Pi Pico 対応
標準Python 3.x 動作確認済み

LocalDB.jsとの違い

  • 保存先:localStorage → JSONファイル
  • サブクエリ:未対応(メモリ制約のため)
  • CONCAT関数:未対応

マイコンのメモリ制約を考慮して、一部の機能を省略していますが、基本的なSQL操作は同じ構文で使用できます。