【发布时间】:2022-01-12 03:26:42
【问题描述】:
list(df) 检索 df 数据帧的列标题。 headers_list 检索现有 438393848 表的现有列标题。我要做的是DROP df 中不存在的438393848 表的列标题,然后使用to_sql 方法将df 数据帧推入438393848 SQLite数据库。但是,df.to_sql 会引发 ValueError("Empty table or column name specified")。
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,列为DROPed,并根据数据框df的列标题。
有谁知道问题出在哪里?
【问题讨论】:
-
在使用
for column in headers_list:循环之前尝试print(headers_list)。它打印什么?
标签: python sql pandas dataframe sqlite