将导入的类添加到元数据

时间:2012-02-08 14:59:43

标签: import schema sqlalchemy

所有

我正在从一个单独的文件中为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)

经过一些测试后,我发现这种方法遗漏了重要信息。我已经回到了一个包含所有内容的文件,因为它确实可以正常工作。如果有人能够提出一个可以正常工作的答案,我会将问题保持打开状态。或者,指向适当的文档。

0 个答案:

没有答案