Использование цикла Python для вызова нескольких баз данных SQL - PullRequest
0 голосов
/ 09 октября 2019

Я хочу вызвать несколько баз данных в Microsoft SQL:

driver = 'SQL Server'
server = '123'
tcon = 'yes'
uname = 'name'
pword = 'password'
query = "query1"

Я превращаю свои базы данных в список, как показано ниже:

db = ['DBA','DBB','DBC']

Затем выполняю цикл для вызова всех баз данных в спискевыше, как показано ниже:

for i in db:
  sql_conn = pyodbc.connect(driver='{SQL Server}', host=server, database= f'{i}',
                  trusted_connection=tcon, user=uname, password=pword)

  df = pd.read_sql(query, sql_conn)

  df['DB_NAME'] = f'{i}' #to add name column in the dataframe

Тем не менее, я получаю данные только из «DBC». Я хочу три отдельных кадра данных, таких как df_DBA, df_DBB, df_DBC из цикла выше.

1 Ответ

1 голос
/ 09 октября 2019

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

Если вам нужны отдельные переменные для данных из каждой базы данных, попробуйте следующее:

def read_sql(query, db_name):
    conn = pyodbc.connect(driver='{SQL Server}', host=server, database=db_name,
                          trusted_connection=tcon, user=uname, password=pword)
    df = pd.read_sql(query, conn)
    df['DB_NAME'] = db_name
    return df


db_DBA = read_sql(query, 'DBA')
db_DBB = read_sql(query, 'DBB')
db_DBC = read_sql(query, 'DBC')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...