我创建了一个Connector
类,该类从动态加载的python文件中的给定位置导入Table
类。我有两个数据库目标-一个是由config指定的,另一个是内存中的。
class Connector(object):
_target_module = "plugin.database"
def __init__(self, driver, connection_string, **kwargs):
self._engines = {
"primary": create_engine(f"{driver}://{connection_string}", **kwargs),
"memory": create_engine(f"sqlite:///:memory:"),
}
self._setup_tables()
def _setup_tables(self):
importable_classes = import_classes(...)
# initialize classes
logger.debug("Initializing database plugin classes: %s", importable_classes)
for cls in importable_classes:
cls.metadata.create_all(bind=self._engines[cls.__database__])
问题是,即使每个.create_all()
调用都指定了bind
,SQLAlchemy似乎总是在所有引擎中创建所有表。我错过了什么吗?还是故意的?
谢谢您的时间,丹尼尔
根据文档,metadata.create_all将
创建此元数据中存储的all表。
但是,它接受一个tables
自变量,它是
表对象的可选列表,它是MetaData中总表的子集
因此,您可以将表对象列表传递给cls.metadata.create_all
,以限制为特定引擎创建的表。