SQLAlchemy在所有引擎中创建表

2024-09-27 23:24:47 发布

您现在位置:Python中文网/ 问答频道 /正文


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

谢谢您抽出时间,
丹尼尔


Tags: selfconnectorstringdefdrivercreateconnectionplugin
1条回答
网友
1楼 · 发布于 2024-09-27 23:24:47

根据文件,metadata.create_all

Create all tables stored in this metadata.

但是,它接受一个tables参数,该参数是

Optional list of Table objects, which is a subset of the total tables in the MetaData

因此,您可以将表对象列表传递给cls.metadata.create_all,以确定为特定引擎创建哪些表

相关问题 更多 >

    热门问题