df.to_sql вызывает ошибку ValueError(«Указано имя пустой таблицы или столбца»)

#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 в данном случае. Следовательно, нет необходимости в приведенном выше коде для замены имен заголовков столбцов.