我有以下目录结构。
??? 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,但这似乎是一种解决方法。
如何正确地做到这一点?