Как написать один запрос, чтобы запускался на нескольких БД?

Есть несколько БД, и нужно написать один запрос, чтобы запускался на каждой БД.

Data base connection file:

db1 = create_engine('mssql+pymssql://login:pass@host:1433/db1')
db2 = create_engine('mssql+pymssql://login:pass@host:1433/db2')
db3 = create_engine('mssql+pymssql://login:pass@host:1433/db3')

Pandas file:

c1_engine = db1  
pd1 = pd.read_sql(
"""select * from table """,
c1_engine)
pd1.to_sql('table2', con=dwh_engine, if_exists='append', index=False)

Думаю как-то сделать циклом c1_engine (db1,db2,db3), но не знаю как.


Ответы (2 шт):

Автор решения: MaxU

Ну вот прямо как вы и описали в вопросе:

qry = """select * from table_name"""

for engine in [db1, db2, db3]:
    df = pd.read_sql(qry, con=engine)
    df.to_sql("table2", con=engine, if_exists="append", index=False)

Для красоты можно все соединения с БД оформить как список или словарь:

engines = []
engine.append(create_engine('mssql+pymssql://login:pass@host:1433/db1'))
engine.append(create_engine('mssql+pymssql://login:pass@host:1433/db2'))
...

и потом использовать этот список:

for engine in engines:
    ...
→ Ссылка
Автор решения: fikos

@MaxU спасибо . Сделал подругому -

db = {'db1':create_engine('mssql+pymssql://login:pass@host:1433/db1'),
          'db2':create_engine('mssql+pymssql://login:pass@host:1433/db2')}
for engine in db.values():
...
→ Ссылка