[英]df.to_sql raises ValueError("Empty table or column name specified")
list(df)
检索df
dataframe 的列标题。 headers_list
检索现有438393848
表的现有列标题。 我要做的是438393848
df
中不存在的DROP
表的列标题,然后使用to_sql
方法将df
dataframe 推送到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
dataframe ,这使得df
与 SQLite 表438393848
不同步。 我想要做的是使用这组代码来更新我的表438393848
的列,以便在列匹配后可以将df
推送到 SQLite 表。 运行代码一次后,通过打印表格438393848
,该列被DROP
编辑并符合 dataframe df
的列标题。
有谁知道问题是什么?
重新阅读 df.to_sql 文档后, if_exists=replace
参数会删除该表并用一个全新的数据集替换该表,在本例中为df
。 因此,上述代码无需替换列 header 名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.