如何引用尚未定义的类?

Sin*_*5k4 4 python sqlalchemy

我有以下两个类:

class Product(db.Model):
    __tablename__ = 'product'

    ProductID = db.Column(db.Integer, primary_key=True)
    StartOperatorID = db.Column(db.Integer, db.ForeignKey('user.UserID'), nullable=False)
    StartOperator = db.relationship("User", foreign_keys=[StartOperatorID])
    WorkBenchID = db.Column(db.Integer, db.ForeignKey('workbench.WorkBenchID'))
    WorkBench = db.relationship(WorkBench)


class WorkBench(db.Model):
    __tablename__ = 'workbench'

    WorkBenchID = db.Column(db.Integer, primary_key=True)
Run Code Online (Sandbox Code Playgroud)

但是,我得到以下NameError,因为WorkBench定义如下产品:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-3a482de7fdcf> in <module>()
----> 1 from example import models

/home/Sin5k4/example/models.py in <module>()
     16 
---> 17 class Product(db.Model):
     18     ProductID = db.Column(db.Integer, primary_key=True)

/home/Sin5k4/example/models.py in Product()
     21     WorkBenchID = db.Column(db.Integer, db.ForeignKey('workbench.WorkBenchID'))
---> 22     WorkBench = db.relationship(WorkBench)
     23 

NameError: name 'WorkBench' is not defined
Run Code Online (Sandbox Code Playgroud)

来自.NET背景,我真的很挣扎.定义与此类的关系的正确方法是什么?

dav*_*ism 5

解释Python程序时,类定义按顺序执行,包括类级变量的定义(例如该关系).为了允许关系的无序定义,除了直接传递类之外,SQLAlchemy还有一些其他的语义.实际上,您的其他一些关系已经在使用此表单:传递字符串名称而不是类对象.您还可以传递一个评估为类对象的lambda,或者修复它.

# by class name (preferred in most cases)
WorkBench = db.relationship('WorkBench')
# or by lambda
WorkBench = db.relationship(lambda: WorkBench)
Run Code Online (Sandbox Code Playgroud)