0

私はTransactionテーブル を持っています

class Transaction(Base):
    __tablename__ = 'transaction'
    id = Column('id', Integer, primary_key=True)
    name = Column('name', String)
    amount = Column('amount', Float)
    category_id = Column('category_id', Integer, ForeignKey('category.id'))
    date_created = Column('date_created', Date, default=datetime.now())
    date_modified = Column('date_modifed', Date, onupdate=datetime.now())

そしてCategory表として

class Category(Base):
    __tablename__ = 'category'
    id = Column('id', Integer, primary_key=True)
    name = Column('name', String)
    subtype = Column('subtype', String)

トランザクション データセットを次のように追加します。

name, amount, category_id
Costo,59.0,5
Costo,20,5
Safeway,6.75,1
Safeway,11,1
Safeway,19,1

クエリを実行すると、それらも表示されます

for transaction in session.query(Transaction):
    logging.info(transaction)

データも表示されます

INFO:root:<Transaction(22, Medical Insurance, 110.0, 62, 2013-03-09, None)>
INFO:root:<Transaction(23, AllState Renter Insurance, 100.0, 77, 2013-03-09, None)>

しかし、私は6277categoty_idを見ています。

次のようなオブジェクトとして値が必要なだけです

INFO:root:<Transaction(22, Medical Insurance, 110.0, **Medical**, 2013-03-09, None)>
INFO:root:<Transaction(23, AllState Renter Insurance, 100.0, **Insurance**, 2013-03-09, None)>

別のテーブルのオブジェクトをアタッチするにはどうすればよいですか?

使用するだけでは十分ではないと確信してprimary_keyいますが、他に何をする必要がありますか? ご意見をお聞かせください

について学び始めたばかりですSQLAlchemy

4

2 に答える 2

1

おそらく作成する必要がありますrelationship(): http://docs.sqlalchemy.org/en/latest/orm/relationships.html

from sqlalchemy.orm import relationship, backref

class Category(Base):
    __tablename__ = 'category'
    id = Column('id', Integer, primary_key=True)
    name = Column('name', String)
    subtype = Column('subtype', String)
    # This line is new
    transactions = relationship("Transaction", backref="category")

あなたの質問を完全に理解したかどうかはわかりませんが、これtransactionsにより、関連するアイテムのコレクションを含む各カテゴリに属性が関連付けられるはずです。または、次のようにします。

class Transaction(Base):
    __tablename__ = 'transaction'
    id = Column('id', Integer, primary_key=True)
    name = Column('name', String)
    amount = Column('amount', Float)
    category_id = Column('category_id', Integer, ForeignKey('category.id'))
    date_created = Column('date_created', Date, default=datetime.now())
    date_modified = Column('date_modifed', Date, onupdate=datetime.now())
    category = relationship("category")

オブジェクトを反対方向に多対1でアタッチします(@daydreamerがすでに理解しているように)。

于 2013-03-10T02:00:18.050 に答える
0

私の に次の行を追加した後、トランザクションに関連付けられたTransactionを参照できましたCategory

category = relationship('Category')

私のクラスTransactionは最終的に次のようになります

class Transaction(Base):
    __tablename__ = 'transaction'
    id = Column('id', Integer, primary_key=True)
    name = Column('name', String)
    amount = Column('amount', Float)
    category_id = Column('category_id', Integer, ForeignKey('category.id'))
    date_created = Column('date_created', Date, default=datetime.now())
    date_modified = Column('date_modifed', Date, onupdate=datetime.now())
    category = relationship('Category')

出力は次のようになります

INFO:root:<Transaction(28, ATT, 89.0, <Category(148, Utilities, Phone)>, 2013-03-09, None)>
INFO:root:<Transaction(27, Car Gas, 47.0, <Category(146, Utilities, Gas & Fuel)>, 2013-03-09, None)>

適切なドキュメントを指摘してくれた@David Marxに感謝します

于 2013-03-10T02:09:43.073 に答える