SQL Алхимия динамически сравнивает подмножество столбцов с Pandas DataFrame - PullRequest
0 голосов
/ 01 февраля 2020

Я хотел бы сравнить строки таблицы 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.

Но если я заранее не знаю длины этого списка, я не смогу его установить таким образом.

Код, первоначально найденный здесь .

1 Ответ

0 голосов
/ 01 февраля 2020

Python имеет функцию для списков, называемую лексографией c сравнение

row_one = ...
row_two = ...

list(row_one) == list(row_two)
# true if equally long AND all elements are the same

Вы должны быть в состоянии использовать это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...