既に作成されたシーケンスとそのPK(数値)が定義されている既存のOracleデータベース内のテーブルにDjangoを統合しています。達成したいのは、現在定義されているシーケンスを使用してこのテーブルの新しい行を作成できることです。どうやってやるの?Django Model PKにカスタムOracleシーケンスを使用する方法は?
0
A
答えて
-1
私はthis gistに基づいて、この問題を解決することが一般的に使用することができるように、PKの表記にIDを変更:
# your_app/models.py
def update_pk(func):
'''A decorator for pulling a data objects PK value out of a
user-defined sequence. This gets around a limitation in
django whereby we cannot supply our own sequence names.'''
def decorated_function(*args):
# Grab a reference to the data object we want to update.
data_object = args[0]
# Only update the PK if there isnt one yet.
if data_object.pk is None:
# Construct the new sequence name based on the tables meta data. This might be different depending on your needs
sequence_name = 'seq_%s' % data_object._meta.db_table
# Query the database for the next sequence value.
from django.db import connection
cursor = connection.cursor()
cursor.execute("SELECT %s.nextval FROM DUAL;" % (sequence_name))
row = cursor.fetchone()
# Update the data objects PK with the returned sequence value.
data_object.pk = row[0]
# Execute the function were decorating.
return func(*args)
return decorated_function
# Example model using the decorator to grab the PK.
class FAQ(models.Model):
id = models.IntegerField(primary_key=True)
category = models.ForeignKey(FAQCategory)
question = models.CharField(maxlength=255)
answer = models.TextField()
published = models.BooleanField(default=False)
list_ordering = models.FloatField(max_digits=6, decimal_places=2, default=9999)
def __str__(self):
return self.question
@update_pk
def save(self):
# Now actually save the object.
super(FAQ, self).save()
class Meta:
db_table = 'faqs'
0
私はちょうどこの最後の週に走りました。私のテーブルはMetaにmanaged = false
で定義され、Oracleのシーケンスは主キーの値を提供するために使われます。行が保存された後にキー値を取得するようにDjangoに指示するには、列をAutoFieldとして宣言します。
surrogate_id = models.AutoField(primary_key=True,blank=True)
関連する問題
- 1. Django django model utilsを使用してサブクラスでクエリーセットをフィルタリングする方法は?
- 2. Djangoリクエストオブジェクトにpkを追加する方法は?
- 3. カスタムlesscをdjangoプロジェクトにパッケージする方法は? (django-pipelineを使用)
- 4. レガシーデータベースを使用したDjango - DBシーケンスの操作方法?
- 5. を作成および使用シーケンスをOracleストアドプロシージャに - シーケンス
- 6. Oracle Apexのストアド・プロシージャに新しいPKを渡す方法
- 7. シーケンスでOracleに複数行挿入する方法は?
- 8. Django、1つの関数でpkとオブジェクトを扱う方法
- 9. 製品/カテゴリに独自のPKを使用する方法
- 10. Yii CDbCriteriaとModel-> findAll、カスタム列を追加する方法は?
- 11. シーケンス間シーケンスNLPタスクにRNNを適用する方法は?
- 12. Django:カスタムPK自動インクリメントを作成していますか?
- 13. Django BigAutoユーザー(Userテーブルの64ビットPKを取得する方法)
- 14. Djangoのクリスピーフォームでpk引数を使用するform_action
- 15. Oracleデータベースから自動インクリメントされたPKを取得する方法は?
- 16. コンポジットPK(Hibernate JPA)でエンティティで "findBy"を使用する方法
- 17. GenericAPIViewを使用してdjango restフレームワークのネストされたルートで親pkを取得する方法は?
- 18. ArrayをDjango Modelフィールド(PostgreSQLを使用しない)に格納する方法はありますか?
- 19. django rest framework、non pkネストシリアライザ
- 20. djangoのModelオブジェクトを削除するjqueryを使用するAjax
- 21. Djangoカスタム変数をカスタム管理テンプレートで使用するためのコンテキストに渡す方法は?
- 22. AutoFieldを使ってdjangoのデフォルトpkをBigAutoFieldに変更する
- 23. DjangoでカスタムSQLをインストールする方法
- 24. `db.Database.SqlQuery <model> 'の使用後にパラメータをクリアする方法
- 25. Djangoでthrough-modelを使って属性にアクセスするには?
- 26. OracleのID、PKとFKデータベーススキーマ
- 27. 分散環境でOracleシーケンスIDをプリフェッチする方法
- 28. Asp.netでOracleを使用する方法
- 29. Django作成コメントパスを渡す件名pk
- 30. Active Record ModelなしでActive Modelシリアライザを使用するには?
フィールドへの入力に使用するシーケンスをどのように宣言しますか? –
Adamは、Django管理テーブルを使用して、Oracleに必要なシーケンスを作成してリンクします。別々にコーディングする必要はありません。私の提案は、既にシーケンス設定がされている管理されていないテーブルでの使用に限定されていました。 – Dashdrum
私の質問は、「管理されていないテーブルを使用すると、新しいシーケンス値をどのように生成して取得するのですか? これまで、挿入トリガーを使用している人がシーケンスから列を更新するのを見てきましたが、私はdjangoの内部でより良い方法を見ていきたいと考えていました。 –