0

SQLite データベースと Django のQuerySetAPI を使用してこのデータベースにアクセスしています。データベースにデータを順番に書き込み、各エントリには主キーとして単純な ID があります (これが Django のデフォルトです)。これは、データベースに ID の連続したシーケンスがあることを意味します (エントリ 1 は ID 1、エントリ 2 は ID 2 など)。ここで、いくつかのエントリを再度削除する必要がありました。これは、ID のシーケンスが不連続であることを意味します (エントリ 1 には ID 1 がありますが、エントリ 2 には ID 3、8、1432 などがありますが、2 はありません)。

この ID の連続シーケンスを再び復元し、データベース内の残りのエントリに関連付けるにはどうすればよいですか? Django の API でこれを行う方法はありQuerySetますか、それともプレーン SQL を使用する必要がありますか? 私はプレーン SQL の経験がないので、この場合、いくつかの実用的なコードが非常に役立ちます。ありがとうございました!

4

1 に答える 1

3

これを行うことが望ましい状況は考えられません。最良の主キーは不変であり(技術的な要件ではありませんが)、意味のない整数の主キーを使用する目的は、それらを更新する必要がないようにすることです。

意味のある、途切れのない整数のシーケンスが必要な場合は、テーブルに別の列を作成し、シーケンスの区切りを含む主キーを保持し、必要に応じて新しい「シーケンス」列の番号を付け直します。

しかし、あなたは私が考えることができない要件を持っているかもしれません。これらのキーの値を本当に変更する 必要がある場合は、データベース内のその列へのすべての参照がFOREIGN KEY制約によって保護されていることを確認し、外部キーを宣言するときにONUPDATECASCADEオプションをチェックしてください。それはあなたのために更新を行うようにデータベースに指示します。

しかし、あなたがこれをする必要がないなら、そうしないでください。

于 2012-10-30T20:18:22.913 に答える