如何处理sqlalchemy中的跨架构外键?

use*_*095 7 python sqlalchemy

我有以下目录结构。

??? alchemy_models
?   ??? foo.py
?   ??? bar.py
?   ??? __init__.py # Base in here
??? setup.py
Run Code Online (Sandbox Code Playgroud)

文件

class Foo(Base):
    __tablename__ = 'foos'
    __table_args__ = {'schema': 'foo'}
    barid = Column(Integer, ForeignKey('bar.bars.id'))
Run Code Online (Sandbox Code Playgroud)

酒吧.py

class Bar(Base):
    __tablename__ = 'bars'
    __table_args__ = {'schema': 'bar'}
    id = Column(Integer, primary_key=True)
Run Code Online (Sandbox Code Playgroud)

如果我有一些文件,比如main.pywhere

engine = create_engine('sqlite://')
engine.execute('attach ":memory:" as "bar"')
engine.execute('attach ":memory:" as "foo"')

Base.metadata.create_all()
Run Code Online (Sandbox Code Playgroud)

这将失败 Foreign key associated with column 'foo.barid' could not find table 'bar.bars'...

这可能是因为没有人导入bar.py,所以条形表不在元数据中。但是该怎么办呢?我们可以from bar import Bar在里面,foo.py但这在一般情况下会导致循环导入问题。

现在我们在 init.py 中有所有“模式”文件的列表,并在使用它们中的任何一个之前将它们一个一个地导入main.py,但这似乎是一种解决方法。

如何正确地做到这一点?