尽管有具体的绑定,SQLAlchemy仍在所有引擎中创建表

问题描述 投票:0回答:1

我创建了一个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似乎总是在所有引擎中创建所有表。我错过了什么吗?还是故意的?

谢谢您的时间,丹尼尔

python sqlalchemy
1个回答
0
投票

根据文档,metadata.create_all

创建此元数据中存储的all表。

但是,它接受一个tables自变量,它是

表对象的可选列表,它是MetaData中总表的子集

因此,您可以将表对象列表传递给cls.metadata.create_all,以限制为特定引擎创建的表。

© www.soinside.com 2019 - 2024. All rights reserved.