#python #sql #pandas #dataframe #sqlite
#питон #sql #панды #фрейм данных #sqlite
Вопрос:
list(df)
извлекает заголовки столбцов df
кадра данных. headers_list
извлекает существующие заголовки столбцов существующей 438393848
таблицы. То, что я пытаюсь сделать DROP
, — это указать заголовки столбцов 438393848
таблицы, которых в них нет, df
и затем использовать to_sql
метод для df
ввода кадра данных в 438393848
базу данных SQLite. Однако df.to_sql
вызывает ошибку ValueError(«Указано пустое имя таблицы или столбца»).
with conn: c.execute(f"CREATE TABLE IF NOT EXISTS '438393848' ({list(df)[0]})") try: for header in list(df)[1:]: c.execute(f"ALTER TABLE '438393848' ADD COLUMN {header}") except: pass colnames = conn.execute("SELECT * FROM '438393848'").description headers_list = list(map(lambda x: x[0], colnames)) for column in headers_list: if column not in list(df): c.execute(f"ALTER TABLE '438393848' DROP COLUMN {column}") colnamesnew = conn.execute("SELECT * FROM '438393848'").description df.to_sql('438393848', conn, if_exists='replace', index=False)
Для контекста я df
отредактировал фрейм данных в другом наборе кода, который df
не синхронизирован с таблицей SQLite 438393848
. Что я хочу сделать, так это использовать этот набор кода для обновления столбцов моей таблицы 438393848
df
, чтобы их можно было перенести в таблицу SQLite теперь, когда столбцы совпадают. После однократного запуска кода, распечатав таблицу 438393848
, столбец DROP
редактируется в соответствии с заголовками столбцов df
фрейма данных .
Кто — нибудь знает, в чем проблема?
Комментарии:
1. Попробуйте
print(headers_list)
, прежде чем зацикливатьсяfor column in headers_list:
. Что он печатает?
Ответ №1:
После повторного прочтения документации df. if_exists=replace
to_sql параметр удаляет таблицу и заменяет таблицу совершенно новым набором данных, как df
в данном случае. Следовательно, нет необходимости в приведенном выше коде для замены имен заголовков столбцов.