我是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
知道什么是错的吗?
答案 0 :(得分:0)
要了解您收到错误的原因,您应该在Python中更新您对class construction的理解:
当输入类定义时,会创建一个新的命名空间,并将其用作本地范围 - 因此,对局部变量的所有赋值都将进入此新命名空间。特别是,函数定义在此处绑定新函数的名称。
在您的示例中,您没有指定seller_id
的名称,因此在课程构建期间尝试使用该名称会引发NameError
。在类构造期间,您在当前命名空间中可用的内容是您指定的__table__
。事实上,这个确切的用例记录在"Using a Hybrid Approach with __table__
":
请注意,当使用
__table__
方法时,对象可立即在类声明主体本身中用作普通Table
,因为Python类只是另一个语法块。
换句话说,通过绑定到名称Table
的{{1}}对象访问列:
__table__