Как выполнить один и тот же sql-запрос по разным экземплярам базы данных и добавить данные в python

#python #python-3.x #pandas #dataframe #for-loop

Вопрос:

У меня есть это code , которое устанавливает соединение с базой данных, извлекает данные и сохраняет их в кадре данных

Текущий Код

 CONN_INFO = {'host': host,'port': port,'user': user,'psw': password,'service': service,}
CONN_STR = '{user}/{psw}@{host}:{port}/{service}'.format(**CONN_INFO)
connection=cx_Oracle.connect(CONN_STR)
cursor=connection.cursor()
cur.execute("""SELECT risk_level_01, risk_level_02, risk_type_code FROM public.md_risk_code""")

data=cur.fetchall()
columns = [column[0] for column in cur.description]
dfaws = pd.DataFrame(data,columns=columns)
 

Теперь у меня есть сценарий, в котором я выполняю sql из 3 разных баз данных и добавляю данные из 3 баз данных. Как это можно сделать, используя концепцию цикла.

У меня есть хозяин, как host1,host2,host3

У меня есть порт, как port1,port2,port3

У меня есть psw в качестве password1,password2,password3

У меня есть услуга, как service1,service2,service3

Как это можно запустить в цикле, извлечь и сохранить в кадре данных.

Ответ №1:

Вы можете иметь список словарей информации о соединении и просматривать их. Используя информацию о каждом подключении, установите соединение с базой данных, извлеките нужные данные и добавьте их во фрейм данных, который вы создадите локально.

Псевдокод будет:

 CONN_INFOS = [{"host":host1,.....}, {"host":host2,.....}, ....]
df = pd.Dataframe() #Intialize a dataframe
for CONN_INFO in CONN_INFOS:
   CONN_STR = '{user}/{psw}@{host}:{port}/{service}'.format(**CONN_INFO)
   connection=cx_Oracle.connect(CONN_STR)
   cursor=connection.cursor()
   cur.execute("""SELECT risk_level_01, risk_level_02, risk_type_code FROM public.md_risk_code""")
   data=cur.fetchall()
   #append data to dataframe
   #close each connection after used