首页 > 解决方案 > 使用没有标头的 pandas 数据框通过 to_sql 写入 mysql

问题描述

我有一个从 excel 表(源)创建的数据框。excel 工作表将没有标题行。

我在 mysql 中有一个已经创建的表(目标)。它总是与 Excel 工作表完全相同的布局。

source_data = pd.read_excel(full_path, sheet_name=sheet_name, skiprows=ignore_rows, header=None)

db_engine = [function the returns my mysql engine]

source_data.to_sql(name=table_name, con=db_engine, schema=schema_name, if_exists='append', index=False)

由于 pandas 在插入语句中使用数字作为列名,因此失败并出现错误。

[SQL: INSERT INTO [tablename] (0 , 1) VALUES (%(0)s, %(1)s)]

error=(pymysql.err.OperationalError) (1054, "Unknown column '0' in 'field list'

我怎样才能解决这个问题?我可以使用不同的插入方法吗?我真的必须使用表中正确的列名加载数据框吗?

标签: pythonmysqlpandasdataframesqlalchemy

解决方案


找不到替代品..在读取期间将列名添加到数据框中..

所以首先我构建了列名列表

sql = ("select [column_name] from [table i get my metadata from];")

db_connection = [my connection for sqlalchemy]

result = db_connection.execute(sql)

column_names = []

for column in result:

column_names.append(column[0])

然后我在读取命令中使用该列列表:

source_data = pd.read_excel(full_path, sheet_name=sheet_name, skiprows=ignore_rows,header=None, names=column_names)

然后 to_sql 语句运行没有错误。


推荐阅读