私は、PythonのSQLAlchemyの辞書のコレクションを設定するといくつかの問題を抱えています。私はテーブルと1:N関係のItem
テーブルを持っています。SQLAlchemyのMappedCollection問題
_Base = declarative_base()
class Record(_Base):
__tablename__ = 'records'
item_id = Column(String(M_ITEM_ID), ForeignKey('items.id'))
id = Column(String(M_RECORD_ID), primary_key=True)
uri = Column(String(M_RECORD_URI))
name = Column(String(M_RECORD_NAME))
class Item(_Base):
__tablename__ = 'items'
id = Column(String(M_ITEM_ID), primary_key=True)
records = relation(Record, collection_class=column_mapped_collection(Record.name), backref='item')
は、今私はItem
sおよびRecord
秒で仕事をしたい:私は、次のコードを使用して関係を設定します。
i1 = Item(id='id1')
r = Record(id='mujrecord')
をそして今、私は次のコードを使用して、これらのオブジェクトを関連付ける::いくつかのオブジェクトを作成してみましょう
i1.records['source_wav'] = r
しかしRecord r
はname
属性(外部キー)を設定していません。自動的にこれを保証する方法はありますか? (私は、Record
の作成作業中に外部キーを設定することは知っていますが、それは私にとっては良いとは言えません)。あなたが持っている
感謝
おそらくそうではありません。 backrefは、sqlalchemyが関係の他の側(Recordクラス)に追加する属性の名前で、前方参照を保持するオブジェクト(Itemインスタンス)を参照します。ですから、 'item'は意味があります - honzasの例では、r.itemはItemインスタンスを生成します。 –