所有
我正在从一个单独的文件中为sqlalchemy导入一组类。它们定义了我的数据库上的表(继承自declarative_base()),最初位于与我的引擎和元数据创建相同的文件中。
由于我有很多表,并且每个表都很复杂,我不希望它们位于我正在使用它们的同一个文件中。这使得在文件中工作更加笨拙,我想要更多清晰的描述,因为类记录了当前的模式。
我将它们重构为自己的文件,突然元数据无法自动找到它们。 Following this link,我发现这是因为我的主文件声明了base:
from tables import address, statements
Base = declarative_base()
metadata = MetaData()
Base.metadata.create_all()
我的表文件也是如此:
Base = declarative_base()
class address(Base):
...
所以,据我所知,他们会得到单独的“基础”,这就是元数据无法找到并创建声明的表的原因。我已经做了一些谷歌搜索,看起来这应该是可能的,但没有任何明显的方法去做。
如何导入在单独文件中定义的表?
更新
我试过这个,它有点功能。
在表文件中,为要导入的表类声明一个Base:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
然后在主文件中,导入预先存在的基础并将其元数据提供给新的基础:
from sqlalchemy.ext.declarative import declarative_base
from tables import Base as tableBase
Base = declarative_base(metadata=tableBase.metadata)
经过一些测试后,我发现这种方法遗漏了重要信息。我已经回到了一个包含所有内容的文件,因为它确实可以正常工作。如果有人能够提出一个可以正常工作的答案,我会将问题保持打开状态。或者,指向适当的文档。