Я пишу скрипт, который требует взаимодействия с несколькими базами данных (не одновременно).Чтобы облегчить это, я включаю информацию, связанную с БД (соединения и т. Д.) В словарь.Кроме того, я использую 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 (поскольку ни один код еще не использует эту ссылку - пул все еще настраивается).
Короче говоря, код выше? ОК, а если нет, то почему нет - то есть, как я могу это исправить в отношении проблем, упомянутых выше?