3

既存のMSSQLデータベースには、すべて自動番号IDの主キーを持つテーブルが数十ありますが、「id」という名前のテーブルはありません。代わりに、PropertyID、ClientIDなどの名前が付けられています。公式ドキュメントでは、これらの各フィールドの名前を「id」に変更することを提案しているようです。

レガシーデータベース

web2pyは、いくつかの条件下でレガシーデータベースに接続できます。

  • 各テーブルには、「id」と呼ばれる一意の自動インクリメント整数フィールドが必要です。
  • レコードは、「id」フィールドを使用して排他的に参照する必要があります。

これらの条件が満たされていない場合は、これらの要件に準拠するように手動でALTER TABLEを変更する必要があります。そうでない場合、web2pyからアクセスできません。

これは制限として考えるべきではなく、むしろ、web2pyがあなたに良い習慣に従うことを奨励する多くの方法の1つとして考えられるべきです。

ただし、そのためには、このデータベースを使用する他のアプリケーションで何百もの既存のクエリを壊す必要があります。確かに、「id」の代わりに使用する既存の自動番号フィールドの名前を指定する方法が必要です。

これは、Djangoが正しくweb2pyがひどく間違っている領域のようです。それとも私は何かが足りないのですか? 何かが足りなかったようです...

4

2 に答える 2

4

そのステートメントは廃止されました。web2pyでサポートされているケースは3つあります。

  1. テーブルには、「id」(デフォルト)と呼ばれる自動インクリメントフィールドがあります
  2. テーブルに「id」と呼ばれない自動インクリメントフィールドがあり、テーブルを次のように定義します

    db.define_table('name',Field('id_name','id'),...other fields...)

  3. テーブルには異なる主キーがあります

    db.define_table('name',...fields..., primarykey=[....])

主キーはフィールド名のリストです。

オプション3は、サポートされているすべてのデータベースで機能するわけではありませんが、簡単に拡張できます。リクエストがあまりなかったため、考えられるすべてのオプションに対して十分なテスターがいません。このディスカッションをweb2pyメーリングリストに移動してください。喜んでお手伝いさせていただきます。

于 2010-07-14T12:23:25.903 に答える
1

どうやらこれは現在のweb2pyブックには含まれていませんが、実際には実装されているようです。web2py googleグループから:web2pyとキー付きテーブル

注:PDFブック(2版)に記載されていない新機能を参照してこれを見つけました

于 2010-07-12T18:42:18.417 に答える