簡體   English   中英

具有多個外鍵的SQLAlchemy元數據關系

[英]SQLAlchemy Metadata Relationship with Multiple Foreign Keys

我是SQLAlchemy的新手,正在嘗試為現有數據庫設置ORM。 我正在使用元數據設置表並自己指定外鍵。 表設置如下所示:

class User(Base):
    __table__ = Table('users', metadata, 
                      Column('user_id', Integer, primary_key=True), 
                      autoload=True)

class Transaction(Base):
    __table__ = Table('transaction', metadata,
                      Column('transaction_id', Integer, primary_key=True), 
                      Column('seller_id', Integer, ForeignKey('users.user_id')),
                      Column('buyer_id', Integer, ForeignKey('users.user_id')),
                      autoload=True)
    seller = relationship('User', foreign_keys=[seller_id])
    buyer = relationship('User', foreign_keys=[buyer_id])

這不會運行,並顯示錯誤:

NameError: name 'seller_id' is not defined

知道有什么問題嗎?

要了解為什么會出現錯誤,您應該重新了解Python中的類構造

輸入類定義時,將創建一個新的名稱空間,並將其用作本地作用域-因此,對本地變量的所有分配都將進入此新的名稱空間。 特別是,函數定義在此處綁定新函數的名稱。

在您的示例中,您沒有給seller_id分配名稱,因此在類構造期間嘗試使用該名稱會引起NameError 在類構造期間,當前名稱空間中可使用的是您分配的__table__ 實際上,此確切的用例記錄在“使用__table__的混合方法”下

請注意,使用__table__方法時,該對象可立即用作類聲明主體中的普通Table ,因為Python類只是另一個語法塊。

換句話說,通過綁定到名稱__table__Table對象訪問列:

class Transaction(Base):
    __table__ = Table('transaction', metadata,
                      Column('transaction_id', Integer, primary_key=True), 
                      Column('seller_id', Integer, ForeignKey('users.user_id')),
                      Column('buyer_id', Integer, ForeignKey('users.user_id')),
                      autoload=True)
    seller = relationship('User', foreign_keys=[__table__.c.seller_id])
    buyer = relationship('User', foreign_keys=[__table__.c.buyer_id])

暫無
暫無

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

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