Mapper;ORM)です。軽量WebフレームワークであるBottleを使ってアプリケーションを作ろうと思ったのですが、簡単、軽量なORMが見つからず、「作ってしまえ!」と思い立ち、どぶおが作成、公開しているものです。MacaronもBottleもモジュール本体はそれぞれ1つのファイルですので、合わせて2つのファイルでフルスタックWebフレームワーク(MacaronでORM、Bottleでルーティングおよびテンプレート)が実現できるはずです(たぶん)。ドキュメント等は(怪しげな)英語で作成しているため、日本語での解説ページを作成しておきます。アルファ版という位置づけなのでバグ等発見されましたらコメント戴けると助かります。このMacaronが気軽な開発の一助となれば幸いです。http://bottlepy.org/特徴Macaronは軽量アプリケーション開発においてSQLiteを簡単に使用できるようにするために開発されています。SQLite対応のO/RマッパーですPython標準ライブラリ以外には依存していませんデータベースのテーブル情報からモデルのフィールドを自動定義します(ある程度)多対一リレーションに対応していますあらかじめ定義された検証機構を持ち、ユーザーで定義することも可能です軽量WebフレームワークBottleのプラグインを標準で使用可能ですモジュール本体は1つのファイルで構成されています以上のような特徴を備えています。元々はお手軽な開発の際に用いることを目指したライブラリなのであまり凝ったことをするよりも簡単に使えるものを目指しています。最近Djangoを使った開発を行っているため、DjangoのO/Rマッパーの影響を受けています。最近、メンテナンスを再開したのでGithubに最新版(プレリリースだけど)をコミットしてあります。0.4.0からは多対多サポートが追加されています。インストール方法インストールはPyPIまたはGitHubからソースアーカイブを取得するかeasy_installでインストールします。以下のようなコードが書けます。macaron.db_close()実際に使用するときはモデルクラスの定義が必要になりますが、最小限の場合、以下のようにクラス名の定義のみで使用可能です。passこの場合、データベーステーブルの情報よりフィールド情報などを自動的に定義します。SQLの発行メソッドがありません。テーブルの作成は手動で行って下さい。Macaronはexecuteメソッドをラップしているので、executeメソッドでSQLを実行することも可能です。このチュートリアルで使用するテーブルは以下の通りです。INT);この例ではmemberテーブルとteamテーブルは多対一の関係にあります。モデルの定義Macaronでデータベースのテーブルにアクセスするにはモデルクラスを定義する必要がありますが、テーブル情報からある程度は自動生成されます。クラスを定義するにはmacaron.Modelを継承します。min=15)以上のように定義します。テーブル名クラスとテーブル名の対応は自動で行われます。(今のところ)クラス名を小文字にしたものがテーブル名になります。Teamならteam、Memberならmemberです。別の名前を使いたい場合は、クラスプロパティとして_table_nameを指定します。多対一のリレーションは自動で認識されませんので多から一に向けてリレーションを指定します。上の例ではMemberのteamプロパティがそれに当たります。このとき、TeamからMemberがrelated_nameパラメータで指定された名前でリレーションが張られます。省略した場合はテーブル名_setが指定されます。外部キー(fkey)および関連先テーブルのID(id)は以下のように指定できます。上の例ではVARCHAR型は、macaron.CharFieldとして認識され、VARCHAR(20)により文字列の最大長(max_length)が制限としてセットされます。フィールドのデータ型は自動認識され、SQLiteの規則に従って以下のように決定されます。大文字小文字は区別されません。TEXTが含まれているその他、日付型を認識します。max=15)というように指定します。現時点ではCHECK制約の自動認識は行いません。一般的な使用方法Macaronを初期化した後、使用可能になります。軽量の小型WebフレームワークBottleのプラグインMacaronPluginが標準で使用できます。port=8080)動作サンプルはソースツリーのexamples/bottle以下にあります。コメント利用させて頂いています。ありがとうございます。11:07:51macaron.cleanup()において、connectを開放する為に「macaron._m.connection["default"].close()」を追記した方がよいのではないでしょうか?ご検討ください。11:08:16コメントありがとうございます。開発停止してましたが、最近また再開しましたので検討してみます。08:07:20お世話になっております。_generate_sqlにおいて[LIMIT]=>[OFFSET]の順番で指定しないとエラーになうようです。