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

时间:2017-04-24 09:29:41

标签: python sqlalchemy

我有以下目录结构。

├── alchemy_models
│   ├── foo.py
│   ├── bar.py
│   └── __init__.py # Base in here
└── setup.py

foo.py

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

bar.py

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

如果我有一些像main.py那样的文件

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

Base.metadata.create_all()

这会因Foreign key associated with column 'foo.barid' could not find table 'bar.bars'...

而失败

可能会发生这种情况,因为没有人导入bar.py因此bar表不在元数据中。 但该怎么办呢?我们可以在from bar import Barfoo.py但在一般情况下这会导致循环导入问题。

现在我们在init.py中列出了所有“架构”文件的列表,然后在main.py中使用其中任何一个之前逐个导入它们,但这似乎是一种解决方法。

如何正确地做到这一点?

0 个答案:

没有答案