Вы можете сделать это довольно легко, если ваши таблицы не слишком большие, следуя следующему потоку:
Вы можете сделать это довольно легко, если ваши таблицы не слишком большие, следуя следующему потоку:
ta = pd.read_sql('table', engine) #dataframe that exists already in SQL
tb #new dataframe that has columns that the other dataframe does not have
for i in list(tb.columns):
if i in list(ta.columns):
pass
else:
ta[i] = 'NULL'
tconso = ta.append(tb)
tconso.to_sql('table', engine, if_exists='replace')
ОБНОВЛЕНИЕ
поскольку вы утверждаете, что ваши данные большие, то вы можете изменить таблицу непосредственно в sql, выполняя добавление снаружи:
1) импортировать ваши библиотеки
import sqlalchemy
from sqlalchemy import create_engine, MetaData, Table, func, event
from sqlalchemy.sql import text
from urllib.parse import quote_plus
2) соединение:
params = urllib.parse.quote_plus(r'...')
conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params)
engine = create_engine(conn_str, echo=True)
3) выполнить запрос, если столбец новый, и отправить таблицы после добавления новых столбцов:
ta = pd.read_sql('table', engine) #dataframe that exists already in SQL
tb #new dataframe that has columns that the other dataframe does not have
for i in list(tb.columns):
if i in list(ta.columns):
pass
else:
query = text('ALTER TABLE [dbo].[table] ADD ' + i + ' VARCHAR(50)')
connection = engine.connect()
connection.execute(query)
connection.close()
tb.to_sql('table', engine, if_exists=append)
С УДАЛЕНИЕМ НОВЫХ КОЛОНН ИЗ НОВОГО DF
ta = pd.read_sql('table', engine) #dataframe that exists already in SQL
tb #new dataframe that has columns that the other dataframe does not have
for i in list(tb.columns):
if i in list(ta.columns):
pass
else:
tb.drop(columns=[i])
tb.to_sql('table', engine, if_exists=append)
Дайте мне знать, если это работает.
BR