私はそれを持っています-これはそれを行うための最良の方法ですか?-汎用IDフィールドテーブルを次のように作成しました。
class PaymentDetails(Base):
__tablename__ = 'payment_details'
id = Column(Integer, primary_key=True)
type = Column(PaymentType.db_type(), nullable=False)
ここで、宣言型列挙型レシピPaymentType
を使用し、さまざまな支払い方法でこれをサブクラス化します。
@concrete
@do_unique_index('paypal_unique_details', 'env', 'main_email', 'sub_email')
class Paypal(Base):
__tablename__ = 'paypal_details'
id = Column(ForeignKey('payment_details.id'), primary_key=True)
# The rest of the implementation
#
@concrete
@do_unique_index('credit_card_unique_details', 'env', 'card_number')
class CreditCard(Base):
__tablename__ = 'card_details'
id = Column(ForeignKey('payment_details.id'), primary_key=True)
# The rest of the implementation
#
@concrete
@do_unique_index('time_code_unique_details', 'env', 'code')
class TimeCodes(Base):
__tablename__ = 'code_details'
id = Column(ForeignKey('payment_details.id'), primary_key=True)
# The rest of the implementation
#
(ここconcrete
で、関連するとをdo_unique_index
設定します)。次に、列挙値の説明フィールドをこれらの各クラスに設定します。これにより、支払いを検索するために オブジェクトをクエリし、そこからIDとタイプを取得して、次の2番目のクエリを実行できます。そのIDを持つ。__mapper_args__
__table_args__
PaymentType
PaymentDetails
id
Paypal
Paypal
詳細のセットを追加するための私のコードは、単一のトランザクションで、PaymentDetails
作成しようとしている支払いの詳細のタイプを含む次の論理IDをテーブルに追加し、次に詳細を含むエントリをそのテーブルに追加するという点で非常に単純です。入りたいです。次に、これらのORMクラスにメソッドを追加して、各メソッドの購入、販売、および払い戻しを処理するさまざまな方法を処理し、それらを同一として扱うことができるようにします。
次に、vanが述べたように、FK制約をオンにする必要があります。これは、DBアクセスに使用するヘルパークラスにFKリスナーを追加することによって行いました。