Как написать один запрос, чтобы запускался на нескольких БД?
Есть несколько БД, и нужно написать один запрос, чтобы запускался на каждой БД.
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():
...