[英]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.