.. meta:: :keywords: web2py, framework, DAL, データベース抽象化レイヤ, レガシーデータベース .. _legacy_db: レガシデータベースの利用 ======================== ここではweb2pyで生成しないタイプのテーブルを持ったデータベースを、レガシデータベースと呼ぶことにします。 このようなレガシデータベースにアクセスする方法は3通りあります。 1. テーブルにidという名前のフィールドが存在し、フィールドタイプが整数でフィールド値はユニークに自動採番する。 このようなテーブルには、モデル定義に記述するだけで利用が可能です。またマイグレーションが動作すると問題なので、 define_tableのオプションmigrateをFalseにすることを忘れてはいけません。 :: db.define_table('test', Field('id','integer'), Field('field1','string'), migrate=False) 2. テーブルにはidフィールドは存在しないが、フィールドタイプが整数でフィールド値はユニークに自動採番する。 このタイプのテーブルの利用には、モデル定義を記述し、さらにキーとなるフィールドの第2引数に *id* と記述します。 またmigrateオプションはFalseと設定します。 :: db.define_table('test', Field('field1','string'), Field('field2','id'), migrate=False) 3. テーブルにはキーとなるフィールドは存在しないが、複数のフィールドでキーを表現することができる。 複数フィールドでキーを表現できるというのは、複数フィールドがユニークに自動採番するフィールドを構成できるという 意味です。このタイプのテーブルの利用にはprimarykeyオプションを設定します。またmigrateオプションはFalseと設定します。 :: db.define_table('invoice', Field('ivtype'), Field('ivno','integer'), Field('ivdesc'), primarykey=['ivtype','ivno'], migrate=False) primarykeyオプションは現在のところ、DB2、MS-SQL、Ingres、Informixしかサポートされていません。 サポートされていないデータベース管理システムでは、自動採番のidフィールドを追加したビューを作成するなどの工夫が必要です。 レガシテーブルに対しては、web2pyはキー(id)の採番は行いません。このためレコード挿入時など、データベース側でキーの採番を 行う設定が必要です。 レガシデータベースの設定では :meth:`~dal.DAL.define_table` についても参照ください。 参考: `Legacy Databases and Keyed Tables `_ | `レガシー・データベースとキー付きテーブル `_