簡體   English   中英

sqlalchemy:如何將其他表的對象與主鍵關聯?

[英]sqlalchemy: How can I associate object of other table with primary key?

我有一個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)>

但是我確實看到categoty_id6277

我只需要它們的值作為對象

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

您可能需要創建一個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")

以相反的方向多對一地附加對象(如@daydreamer已經弄清楚的)。

在我的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指出正確的文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM