У меня возникает ситуация, когда я пытаюсь импортировать таблицу из SQL, объединить ее с другим фреймом данных из pandas, а затем вернуть объединенный фрейм данных обратно в SQL. Тем не менее, я делаю этот процесс несколько раз.
Например, если у меня есть несколько фреймов данных, таких как
df1 = some data
df2 = other data
df3 = more data
etc.
Для df1, я бы затем использовал PyODB C, чтобы создать запрос к SQL и сохранить таблицу как фрейм данных.
sql_conn = pyodbc.connect(connection_to_database)
query = 'SELECT * FROM [Database].[Schema].[Table1]'
sql_data = pd.read_sql(query, sql_conn)
На этом этапе я бы взял sql_data
, сделал то, что мне нужно, затем конкатенировал его с df1
и выплюнул обратно к SQL, используя sqlalchemy
data = pd.concat([sql_data, df1)
data.to_sql('Table1', if_exists='replace')
Все это прекрасно работает, но мой вопрос возникает, когда мне нужно повторить этот процесс более элегантным способом. Я могу просто жестко закодировать его, выполнив что-то вроде
query = 'SELECT * FROM [Database].[Schema].[Table2]'
sql_data = pd.read_sql(query, sql_conn)
data = pd.concat([sql_data, df2)
data.to_sql('Table2', if_exists='replace')
query = 'SELECT * FROM [Database].[Schema].[Table3]'
sql_data = pd.read_sql(query, sql_conn)
data = pd.concat([sql_data, df3)
data.to_sql('Table3', if_exists='replace')
etc..
Однако это, очевидно, не идеальное решение. Если бы я поместил это в цикл / функцию, я больше всего зациклен на том, как установить соответствующие имена таблиц для каждой таблицы и правильно перебрать каждый фрейм данных, чтобы он соответствовал правильной таблице из SQL.