python - 创建池对象 (Python)

标签 python sqlalchemy

我正在编写一个需要与多个数据库交互(不是同时)的脚本。为了促进这一点,我在字典中维护数据库相关信息(连接等)。顺便说一句,我使用 sqlAlchemy 进行与数据库的所有交互。我不知道这是否与这个问题相关。

我有一个设置池的函数。它看起来有点像这样:

def setupPool():
    global pooled_objects

    for name in NAMES:
        engine = create_engine("postgresql+psycopg2://postgres:pwd@localhost/%s" % name)
        metadata = MetaData(engine)
        conn = engine.connect()
        tbl = Table('my_table', metadata, autoload=True)
        info = {'db_connection': conn, 'table': tbl }

        pooled_objects[name] = info

我不确定上面的代码中是否存在任何问题,因为我使用相同的变量名,并且不清楚(至少对我来说)底层指向资源的指针(正在处理连接)。例如,创建另一个引擎(到不同的数据库)并将其分配给“engine”变量会导致前一个实例被GC“收获”(因为还没有代码使用该引用 - 池仍在设置中) )。

简而言之,上面的代码可以吗?如果不行,为什么不行 - 即我如何针对上述问题修复它?

最佳答案

你的代码非常好。

仅仅因为您使用相同的变量名称并不意味着您正在覆盖(或释放)分配给该变量的另一个对象。事实上,您可以将名称视为对象的临时标签。

现在,您将最终对象存储在全局字典 pooled_objects 中,这意味着在您的程序完成或明确从其中删除数据之前,GC 不会进行释放他们。

关于python - 创建池对象 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8670475/

相关文章:

python - 在 Elixir 或 SQLAlchemy 中,是否有一种方法可以存储实体中每个字段的注释?

python - 使用 .pem 证书和 Python 的 SSL 连接

python - 同时拥有 itemgetter 和 attrgetter

python - 提取嵌套字典中具有最高值的键

python - aiohttp如何记录访问日志?

python - SQLAlchemy:提交后对象映射丢失?

python - sqlalchemy中的分组和计数功能

python - 为什么我的重新训练模型的准确性很差?

python - 从模型对象查询时出现问题

sqlalchemy:使用别名从多个连接中选择特定列