Я хотел бы сравнить строки таблицы SQL Server со строками Pandas DataFrame. Я сравниваю только определенные столбцы (те, которые составляют первичный ключ таблицы.) Поэтому я не знаю, сколько столбцов нужно сравнить заранее. Я хочу изменить следующее для обработки составного первичного ключа (поданного как список строк). В настоящее время это может обрабатывать сравнение только одного столбца и может быть изменено для обработки нескольких, если они известны заранее, но я хотел бы, чтобы это работало динамически .
# Build the WHERE clause of your DELETE statement from rows in the dataframe.
cond = df_update_partial.apply(lambda row: sa.and_(detail_table.c[key_col] == row[key_col]), axis=1)
# trying to fix the above, right now it is set up to handle a single string column name
cond = sa.or_(*cond)
# Define and execute the DELETE
delete = detail_table.delete().where(cond)
with engine.connect() as conn:
conn.execute(delete)
Поэтому приведенная выше строка может выглядеть следующим образом:
cond = df_update_partial.apply(lambda row: sa.and_(detail_table.c[key_col[0]] == row[key_col[0]], detail_table.c[key_col[1]] == row[key_col[1]], detail_table.c[key_col[2]] == row[key_col[2]]), axis=1)
# above is for a primary key made up of 3 columns. key_col is a list of these columns names.
Но если я заранее не знаю длины этого списка, я не смогу его установить таким образом.
Код, первоначально найденный здесь .