我有以下目录结构。
├── 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 Bar
内foo.py
但在一般情况下这会导致循环导入问题。
现在我们在init.py中列出了所有“架构”文件的列表,然后在main.py
中使用其中任何一个之前逐个导入它们,但这似乎是一种解决方法。
如何正确地做到这一点?