我有一个代码,它读取并连接具有类似结构的文件并将其发送到数据库。除了这个特殊的情况外,它工作得很好。
我使用的代码的一部分是:
if file.suffix.lower() == '.xlsx' or file.suffix.upper() == '.XLSX':
frame = pd.read_excel(file, header=0, engine='openpyxl')
(...)
all_df_list.append(frame)
elif file.suffix.lower() == '.csv' or file.suffix.upper() == '.CSV':
frameCSV = pd.read_csv(file, encoding="utf-8")
(..)
all_df_list.append(frameCSV )
xls=pd.concat(all_df_list)
xls.to_sql(table, con=engine, if_exists='append', index=False, chunksize=10000)此特定文件引发此错误:
(pyodbc.ProgrammingError) ('42S21', "[42S21] [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]Column names in each table must be unique. Column name 'Goal 09 - dp eur' in table 'custom_ga_goal_dpeur_carregosa' is specified more than once. (2705) (SQLExecDirectW)")
[SQL:
CREATE TABLE dbo.custom_ga_goal_dpeur_carregosa (
[Day] DATETIME NULL,
[Web Analytics Site Campaign] VARCHAR(max) NULL,
[Web Analytics Site Medium] VARCHAR(max) NULL,
[Web Analytics Site Source] VARCHAR(max) NULL,
[Web Analytics Site Content] VARCHAR(max) NULL,
[Web Analytics Keyword] VARCHAR(max) NULL,
[Device Category] VARCHAR(max) NULL,
[Goal 09 - dp eur ] FLOAT(53) NULL,
filename VARCHAR(max) NULL,
load_date VARCHAR(max) NULL,
[Goal 09 - dp eur] VARCHAR(max) NULL
)我知道这个错误意味着什么。我只是想知道我有没有办法通过编码来解决这个错误?就像发生这种情况一样,加入列并只接受一种数据类型?我不能只对每一种情况进行查询,因为这是大量的文件,而且可能会在另一个文件中再次发生。
发布于 2022-06-02 14:05:39
只需在追加命令之前将所有列转换为字符串:
if file.suffix.lower() == '.xlsx':
frame = pd.read_excel(file, header=0, engine='openpyxl')
frame =frame.astype(str)
(...)
all_df_list.append(frame)
elif file.suffix.lower() == '.csv':
frameCSV = pd.read_csv(file, encoding="utf-8")
frameCSV =frameCSV.astype(str)
(..)
all_df_list.append(frameCSV )
xls=pd.concat(all_df_list)
xls.to_sql(table, con=engine, if_exists='append', index=False, chunksize=10000)https://stackoverflow.com/questions/72477477
复制相似问题