Python 两个依赖类的SqlAlchemy类声明

Python 两个依赖类的SqlAlchemy类声明,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,我在声明所有类映射器的文件中有一个问题 class Application(AbstractId): ......... key_event_id = ORM.column_property( SA.select([ApplicationEvent.id], correlate = True, from_obj = [Application

我在声明所有类映射器的文件中有一个问题

    class Application(AbstractId):

        .........

        key_event_id = ORM.column_property(
                 SA.select([ApplicationEvent.id],
                    correlate = True,
                    from_obj = [Application.__table__.join(ApplicationEvent.__table__)]
                ).as_scalar().label("tag").where(ApplicationEvent.key_event == 1)
            )
            SA.select([ApplicationEvent]).filter(
                        ApplicationEvent.key_event)


    class ApplicationEvent(AbstractId):
        __tablename__ = 'applications_events'

        application_id = SA.Column(SA.Integer, SA.ForeignKey(Application.id), primary_key = True)
        application = ORM.relationship(Application, backref = 'events')
        event_id = SA.Column(SA.Integer, SA.ForeignKey(Event.id), primary_key = True)
        event = ORM.relationship(Event)
这将不起作用,因为ApplicationEvent是在应用程序之前声明的。我怎样才能做到这一点?我需要key\u event\u id作为应用程序的一列

这也行不通:

@declarative.declared_attr
        def key_event_id(cls):  
            return ORM.column_property(
                 SA.select(['ApplicationEvent.id'],
                    correlate = True,
                    from_obj = ['Application.__table__'.join('ApplicationEvent.__table__')]
                ).as_scalar().where('ApplicationEvent.key_event' == 1).label("key_event_id")
            )

参数

一个映射类或实际的映射器实例,表示 关系

参数也可以作为可调用函数传递,并对其进行求值 在映射器初始化时,可以作为Python可计算 使用声明式时使用字符串

你能行

 application = ORM.relationship("Application", backref = 'events')

你可以这样写

application_id = SA.Column("id", SA.ForeignKey("Application.id"), primary_key = True)
application = ORM.relationship("Application", backref = 'events')
event_id = SA.Column("id", SA.ForeignKey("Event.id"), primary_key = True)
event = ORM.relationship("Event")

那么SA.ForeignKey(Application.id)呢?我已经在模型中声明了这些关系,但是我需要该列属性,但是解释器将失败,因为当时还没有声明Application和ApplicationEvent。将模型设置为字符串也不起作用(我只是更新我的答案)
application_id = SA.Column("id", SA.ForeignKey("Application.id"), primary_key = True)
application = ORM.relationship("Application", backref = 'events')
event_id = SA.Column("id", SA.ForeignKey("Event.id"), primary_key = True)
event = ORM.relationship("Event")