2.6. レガシデータベースの利用

ここでは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)の採番は行いません。このためレコード挿入時など、データベース側でキーの採番を 行う設定が必要です。

レガシデータベースの設定では define_table() についても参照ください。

参考: Legacy Databases and Keyed Tablesレガシー・データベースとキー付きテーブル