ユーザーが請求書を保存するときにアプリケーションによって割り当てられる必要がある「番号」属性を持つ単純な「請求書」クラスがあります。いくつかの制約があります:
1) アプリケーションは (シン) クライアント サーバー アプリケーションであるため、番号を割り当てるものは何でも衝突に注意する必要があります
2) 請求書にも「バージョン」属性があるため、単純な DBMS レベルの自動インクリメント フィールドを使用できません
請求書が保存されるたびに作動するカスタムタイプを使用してこれを構築しようとしています。process_bind_param が None 値で呼び出されると、数を決定して衝突を避けるために何らかのシングルトンが呼び出されます。これはまともな解決策ですか?とにかく、私は問題を抱えています..これが私のカスタムタイプです:
class AutoIncrement(types.TypeDecorator):
impl = types.Unicode
def copy(self):
return AutoIncrement()
def process_bind_param(self, value, dialect):
if not value:
# Must find next autoincrement value
value = "1" # Test value :)
return value
私の問題は、Invoice を保存し、AutoIncrement がその番号の値として「1」を設定すると、Invoice インスタンスが新しい番号で更新されないことです..これは予想どおりですか? 何か不足していますか?お時間をいただきありがとうございました!
(Python 2.6 上の SQLA 0.5.3、postgreSQL 8.3 を使用)
編集: TypeDecorators はデフォルト値を扱わないため、Michael Bayer は、この動作は予期されていると私に言いました。