2.6. レガシデータベースの利用¶
ここではweb2pyで生成しないタイプのテーブルを持ったデータベースを、レガシデータベースと呼ぶことにします。
このようなレガシデータベースにアクセスする方法は3通りあります。
テーブルにidという名前のフィールドが存在し、フィールドタイプが整数でフィールド値はユニークに自動採番する。
このようなテーブルには、モデル定義に記述するだけで利用が可能です。またマイグレーションが動作すると問題なので、 define_tableのオプションmigrateをFalseにすることを忘れてはいけません。
db.define_table('test', Field('id','integer'), Field('field1','string'), migrate=False)
テーブルにはidフィールドは存在しないが、フィールドタイプが整数でフィールド値はユニークに自動採番する。
このタイプのテーブルの利用には、モデル定義を記述し、さらにキーとなるフィールドの第2引数に id と記述します。 またmigrateオプションはFalseと設定します。
db.define_table('test', Field('field1','string'), Field('field2','id'), migrate=False)
テーブルにはキーとなるフィールドは存在しないが、複数のフィールドでキーを表現することができる。
複数フィールドでキーを表現できるというのは、複数フィールドがユニークに自動採番するフィールドを構成できるという 意味です。このタイプのテーブルの利用には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 | レガシー・データベースとキー付きテーブル